@hh.ru/magritte-ui-input 9.4.23 → 9.4.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/BaseInput.js +1 -1
- package/DateTimeInput.js +1 -1
- package/UncontrolledDateTimeInput.js +1 -1
- package/index.css +99 -99
- package/{index.esm-D_tgKYlx.js → index.esm-BAUPit5Y.js} +1 -1
- package/{index.esm-D_tgKYlx.js.map → index.esm-BAUPit5Y.js.map} +1 -1
- package/index.js +1 -1
- package/maskito-exports.js +1 -1
- package/package.json +3 -3
- package/useDateTimeMask.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm-D_tgKYlx.js","sources":["../../../node_modules/@maskito/core/index.esm.js","../../../node_modules/@maskito/kit/index.esm.js","../../../node_modules/@maskito/react/index.esm.js"],"sourcesContent":["function getContentEditableSelection(element) {\r\n const { anchorOffset = 0, focusOffset = 0 } = element.ownerDocument.getSelection() || {};\r\n const from = Math.min(anchorOffset, focusOffset);\r\n const to = Math.max(anchorOffset, focusOffset);\r\n return [from, to];\r\n}\n\nfunction setContentEditableSelection(element, [from, to]) {\r\n var _a, _b;\r\n const document = element.ownerDocument;\r\n const range = document.createRange();\r\n range.setStart(element.firstChild || element, Math.min(from, ((_a = element.textContent) === null || _a === void 0 ? void 0 : _a.length) || 0));\r\n range.setEnd(element.lastChild || element, Math.min(to, ((_b = element.textContent) === null || _b === void 0 ? void 0 : _b.length) || 0));\r\n const selection = document.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n}\n\nclass ContentEditableAdapter {\r\n constructor(element) {\r\n this.element = element;\r\n this.maxLength = Infinity;\r\n }\r\n get value() {\r\n return this.element.innerText.replace(/\\n\\n$/, '\\n');\r\n }\r\n set value(value) {\r\n // Setting into innerHTML of element with `white-space: pre;` style\r\n this.element.innerHTML = value.replace(/\\n$/, '\\n\\n');\r\n }\r\n get selectionStart() {\r\n return getContentEditableSelection(this.element)[0];\r\n }\r\n get selectionEnd() {\r\n return getContentEditableSelection(this.element)[1];\r\n }\r\n setSelectionRange(from, to) {\r\n setContentEditableSelection(this.element, [from || 0, to || 0]);\r\n }\r\n select() {\r\n this.setSelectionRange(0, this.value.length);\r\n }\r\n}\r\nfunction maskitoAdaptContentEditable(element) {\r\n const adapter = new ContentEditableAdapter(element);\r\n return new Proxy(element, {\r\n get(target, prop) {\r\n if (prop in adapter) {\r\n return adapter[prop];\r\n }\r\n const nativeProperty = target[prop];\r\n return typeof nativeProperty === 'function'\r\n ? nativeProperty.bind(target)\r\n : nativeProperty;\r\n },\r\n set(target, prop, val, receiver) {\r\n return Reflect.set(prop in adapter ? adapter : target, prop, val, receiver);\r\n },\r\n });\r\n}\n\nconst MASKITO_DEFAULT_ELEMENT_PREDICATE = e => e.isContentEditable\r\n ? maskitoAdaptContentEditable(e)\r\n : e.querySelector('input,textarea') ||\r\n e;\n\nconst MASKITO_DEFAULT_OPTIONS = {\r\n mask: /^.*$/,\r\n preprocessors: [],\r\n postprocessors: [],\r\n plugins: [],\r\n overwriteMode: 'shift',\r\n};\n\nclass MaskHistory {\r\n constructor() {\r\n this.now = null;\r\n this.past = [];\r\n this.future = [];\r\n }\r\n undo() {\r\n const state = this.past.pop();\r\n if (state && this.now) {\r\n this.future.push(this.now);\r\n this.updateElement(state, 'historyUndo');\r\n }\r\n }\r\n redo() {\r\n const state = this.future.pop();\r\n if (state && this.now) {\r\n this.past.push(this.now);\r\n this.updateElement(state, 'historyRedo');\r\n }\r\n }\r\n updateHistory(state) {\r\n if (!this.now) {\r\n this.now = state;\r\n return;\r\n }\r\n const isValueChanged = this.now.value !== state.value;\r\n const isSelectionChanged = this.now.selection.some((item, index) => item !== state.selection[index]);\r\n if (!isValueChanged && !isSelectionChanged) {\r\n return;\r\n }\r\n if (isValueChanged) {\r\n this.past.push(this.now);\r\n this.future = [];\r\n }\r\n this.now = state;\r\n }\r\n updateElement(state, inputType) {\r\n this.now = state;\r\n this.updateElementState(state, { inputType, data: null });\r\n }\r\n}\n\nfunction areElementValuesEqual(sampleState, ...states) {\r\n return states.every(({ value }) => value === sampleState.value);\r\n}\r\nfunction areElementStatesEqual(sampleState, ...states) {\r\n return states.every(({ value, selection }) => value === sampleState.value &&\r\n selection[0] === sampleState.selection[0] &&\r\n selection[1] === sampleState.selection[1]);\r\n}\n\nfunction applyOverwriteMode({ value, selection }, newCharacters, mode) {\r\n const [from, to] = selection;\r\n const computedMode = typeof mode === 'function' ? mode({ value, selection }) : mode;\r\n return {\r\n value,\r\n selection: computedMode === 'replace' ? [from, from + newCharacters.length] : [from, to],\r\n };\r\n}\n\nfunction isFixedCharacter(char) {\r\n return typeof char === 'string';\r\n}\n\nfunction getLeadingFixedCharacters(mask, validatedValuePart, newCharacter, initialElementState) {\r\n let leadingFixedCharacters = '';\r\n for (let i = validatedValuePart.length; i < mask.length; i++) {\r\n const charConstraint = mask[i];\r\n const isInitiallyExisted = (initialElementState === null || initialElementState === void 0 ? void 0 : initialElementState.value[i]) === charConstraint;\r\n if (!isFixedCharacter(charConstraint) ||\r\n (charConstraint === newCharacter && !isInitiallyExisted)) {\r\n return leadingFixedCharacters;\r\n }\r\n leadingFixedCharacters += charConstraint;\r\n }\r\n return leadingFixedCharacters;\r\n}\n\nfunction validateValueWithMask(value, maskExpression) {\r\n if (Array.isArray(maskExpression)) {\r\n return (value.length === maskExpression.length &&\r\n Array.from(value).every((char, i) => {\r\n const charConstraint = maskExpression[i];\r\n return isFixedCharacter(charConstraint)\r\n ? char === charConstraint\r\n : char.match(charConstraint);\r\n }));\r\n }\r\n return maskExpression.test(value);\r\n}\n\nfunction guessValidValueByPattern(elementState, mask, initialElementState) {\r\n let maskedFrom = null;\r\n let maskedTo = null;\r\n const maskedValue = Array.from(elementState.value).reduce((validatedCharacters, char, charIndex) => {\r\n const leadingCharacters = getLeadingFixedCharacters(mask, validatedCharacters, char, initialElementState);\r\n const newValidatedChars = validatedCharacters + leadingCharacters;\r\n const charConstraint = mask[newValidatedChars.length];\r\n if (isFixedCharacter(charConstraint)) {\r\n return newValidatedChars + charConstraint;\r\n }\r\n if (!char.match(charConstraint)) {\r\n return newValidatedChars;\r\n }\r\n if (maskedFrom === null && charIndex >= elementState.selection[0]) {\r\n maskedFrom = newValidatedChars.length;\r\n }\r\n if (maskedTo === null && charIndex >= elementState.selection[1]) {\r\n maskedTo = newValidatedChars.length;\r\n }\r\n return newValidatedChars + char;\r\n }, '');\r\n const trailingFixedCharacters = getLeadingFixedCharacters(mask, maskedValue, '', initialElementState);\r\n return {\r\n value: validateValueWithMask(maskedValue + trailingFixedCharacters, mask)\r\n ? maskedValue + trailingFixedCharacters\r\n : maskedValue,\r\n selection: [maskedFrom !== null && maskedFrom !== void 0 ? maskedFrom : maskedValue.length, maskedTo !== null && maskedTo !== void 0 ? maskedTo : maskedValue.length],\r\n };\r\n}\n\nfunction guessValidValueByRegExp({ value, selection }, maskRegExp) {\r\n const [from, to] = selection;\r\n let newFrom = from;\r\n let newTo = to;\r\n const validatedValue = Array.from(value).reduce((validatedValuePart, char, i) => {\r\n const newPossibleValue = validatedValuePart + char;\r\n if (from === i) {\r\n newFrom = validatedValuePart.length;\r\n }\r\n if (to === i) {\r\n newTo = validatedValuePart.length;\r\n }\r\n return newPossibleValue.match(maskRegExp) ? newPossibleValue : validatedValuePart;\r\n }, '');\r\n return { value: validatedValue, selection: [newFrom, newTo] };\r\n}\n\nfunction calibrateValueByMask(elementState, mask, initialElementState = null) {\r\n if (validateValueWithMask(elementState.value, mask)) {\r\n return elementState;\r\n }\r\n const { value, selection } = Array.isArray(mask)\r\n ? guessValidValueByPattern(elementState, mask, initialElementState)\r\n : guessValidValueByRegExp(elementState, mask);\r\n return {\r\n selection,\r\n value: Array.isArray(mask) ? value.slice(0, mask.length) : value,\r\n };\r\n}\n\nfunction removeFixedMaskCharacters(initialElementState, mask) {\r\n if (!Array.isArray(mask)) {\r\n return initialElementState;\r\n }\r\n const [from, to] = initialElementState.selection;\r\n const selection = [];\r\n const unmaskedValue = Array.from(initialElementState.value).reduce((rawValue, char, i) => {\r\n const charConstraint = mask[i];\r\n if (i === from) {\r\n selection.push(rawValue.length);\r\n }\r\n if (i === to) {\r\n selection.push(rawValue.length);\r\n }\r\n return isFixedCharacter(charConstraint) && charConstraint === char\r\n ? rawValue\r\n : rawValue + char;\r\n }, '');\r\n if (selection.length < 2) {\r\n selection.push(...new Array(2 - selection.length).fill(unmaskedValue.length));\r\n }\r\n return {\r\n value: unmaskedValue,\r\n selection: [selection[0], selection[1]],\r\n };\r\n}\n\nclass MaskModel {\r\n constructor(initialElementState, maskOptions) {\r\n this.initialElementState = initialElementState;\r\n this.maskOptions = maskOptions;\r\n this.value = '';\r\n this.selection = [0, 0];\r\n const { value, selection } = calibrateValueByMask(this.initialElementState, this.getMaskExpression(this.initialElementState));\r\n this.value = value;\r\n this.selection = selection;\r\n }\r\n addCharacters([from, to], newCharacters) {\r\n const { value } = this;\r\n const maskExpression = this.getMaskExpression({\r\n value: value.slice(0, from) + newCharacters + value.slice(to),\r\n selection: [from + newCharacters.length, from + newCharacters.length],\r\n });\r\n const initialElementState = { value, selection: [from, to] };\r\n const unmaskedElementState = removeFixedMaskCharacters(initialElementState, maskExpression);\r\n const [unmaskedFrom, unmaskedTo] = applyOverwriteMode(unmaskedElementState, newCharacters, this.maskOptions.overwriteMode).selection;\r\n const newUnmaskedLeadingValuePart = unmaskedElementState.value.slice(0, unmaskedFrom) + newCharacters;\r\n const newCaretIndex = newUnmaskedLeadingValuePart.length;\r\n const maskedElementState = calibrateValueByMask({\r\n value: newUnmaskedLeadingValuePart +\r\n unmaskedElementState.value.slice(unmaskedTo),\r\n selection: [newCaretIndex, newCaretIndex],\r\n }, maskExpression, initialElementState);\r\n const isInvalidCharsInsertion = \r\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\r\n value.slice(0, unmaskedFrom) ===\r\n calibrateValueByMask({\r\n value: newUnmaskedLeadingValuePart,\r\n selection: [newCaretIndex, newCaretIndex],\r\n }, maskExpression, initialElementState).value;\r\n if (isInvalidCharsInsertion ||\r\n areElementStatesEqual(this, maskedElementState) // If typing new characters does not change value\r\n ) {\r\n throw new Error('Invalid mask value');\r\n }\r\n this.value = maskedElementState.value;\r\n this.selection = maskedElementState.selection;\r\n }\r\n deleteCharacters([from, to]) {\r\n if (from === to || !to) {\r\n return;\r\n }\r\n const { value } = this;\r\n const maskExpression = this.getMaskExpression({\r\n value: value.slice(0, from) + value.slice(to),\r\n selection: [from, from],\r\n });\r\n const initialElementState = { value, selection: [from, to] };\r\n const unmaskedElementState = removeFixedMaskCharacters(initialElementState, maskExpression);\r\n const [unmaskedFrom, unmaskedTo] = unmaskedElementState.selection;\r\n const newUnmaskedValue = unmaskedElementState.value.slice(0, unmaskedFrom) +\r\n unmaskedElementState.value.slice(unmaskedTo);\r\n const maskedElementState = calibrateValueByMask({ value: newUnmaskedValue, selection: [unmaskedFrom, unmaskedFrom] }, maskExpression, initialElementState);\r\n this.value = maskedElementState.value;\r\n this.selection = maskedElementState.selection;\r\n }\r\n getMaskExpression(elementState) {\r\n const { mask } = this.maskOptions;\r\n return typeof mask === 'function' ? mask(elementState) : mask;\r\n }\r\n}\n\nclass EventListener {\r\n constructor(element) {\r\n this.element = element;\r\n this.listeners = [];\r\n }\r\n listen(eventType, fn, options) {\r\n const untypedFn = fn;\r\n this.element.addEventListener(eventType, untypedFn, options);\r\n this.listeners.push(() => this.element.removeEventListener(eventType, untypedFn));\r\n }\r\n destroy() {\r\n this.listeners.forEach(stopListen => stopListen());\r\n }\r\n}\n\nconst HotkeyModifier = {\r\n CTRL: 1 << 0,\r\n ALT: 1 << 1,\r\n SHIFT: 1 << 2,\r\n META: 1 << 3,\r\n};\r\n// TODO add variants that can be processed correctly\r\nconst HotkeyCode = {\r\n Y: 89,\r\n Z: 90,\r\n};\r\n/**\r\n * Checks if the passed keyboard event match the required hotkey.\r\n *\r\n * @example\r\n * input.addEventListener('keydown', (event) => {\r\n * if (isHotkey(event, HotkeyModifier.CTRL | HotkeyModifier.SHIFT, HotkeyCode.Z)) {\r\n * // redo hotkey pressed\r\n * }\r\n * })\r\n *\r\n * @return will return `true` only if the {@link HotkeyCode} matches and only the necessary\r\n * {@link HotkeyModifier modifiers} have been pressed\r\n */\r\nfunction isHotkey(event, modifiers, hotkeyCode) {\r\n return (event.ctrlKey === !!(modifiers & HotkeyModifier.CTRL) &&\r\n event.altKey === !!(modifiers & HotkeyModifier.ALT) &&\r\n event.shiftKey === !!(modifiers & HotkeyModifier.SHIFT) &&\r\n event.metaKey === !!(modifiers & HotkeyModifier.META) &&\r\n /**\r\n * We intentionally use legacy {@link KeyboardEvent#keyCode `keyCode`} property. It is more\r\n * \"keyboard-layout\"-independent than {@link KeyboardEvent#key `key`} or {@link KeyboardEvent#code `code`} properties.\r\n * @see {@link https://github.com/taiga-family/maskito/issues/315 `KeyboardEvent#code` issue}\r\n */\r\n event.keyCode === hotkeyCode);\r\n}\n\nfunction isRedo(event) {\r\n return (isHotkey(event, HotkeyModifier.CTRL, HotkeyCode.Y) || // Windows\r\n isHotkey(event, HotkeyModifier.CTRL | HotkeyModifier.SHIFT, HotkeyCode.Z) || // Windows & Android\r\n isHotkey(event, HotkeyModifier.META | HotkeyModifier.SHIFT, HotkeyCode.Z) // macOS & iOS\r\n );\r\n}\r\nfunction isUndo(event) {\r\n return (isHotkey(event, HotkeyModifier.CTRL, HotkeyCode.Z) || // Windows & Android\r\n isHotkey(event, HotkeyModifier.META, HotkeyCode.Z) // macOS & iOS\r\n );\r\n}\n\n/**\r\n * Sets value to element, and dispatches input event\r\n * if you passed ELementState, it also sets selection range\r\n *\r\n * @example\r\n * maskitoUpdateElement(input, newValue);\r\n * maskitoUpdateElement(input, elementState);\r\n *\r\n * @see {@link https://github.com/taiga-family/maskito/issues/804 issue}\r\n *\r\n * @return void\r\n */\r\nfunction maskitoUpdateElement(element, valueOrElementState) {\r\n var _a;\r\n const initialValue = element.value;\r\n if (typeof valueOrElementState === 'string') {\r\n element.value = valueOrElementState;\r\n }\r\n else {\r\n const [from, to] = valueOrElementState.selection;\r\n element.value = valueOrElementState.value;\r\n if (element.matches(':focus')) {\r\n (_a = element.setSelectionRange) === null || _a === void 0 ? void 0 : _a.call(element, from, to);\r\n }\r\n }\r\n if (element.value !== initialValue) {\r\n element.dispatchEvent(new Event('input', \r\n /**\r\n * React handles this event only on bubbling phase\r\n *\r\n * here is the list of events that are processed in the capture stage, others are processed in the bubbling stage\r\n * https://github.com/facebook/react/blob/cb2439624f43c510007f65aea5c50a8bb97917e4/packages/react-dom-bindings/src/events/DOMPluginEventSystem.js#L222\r\n */\r\n { bubbles: true }));\r\n }\r\n}\n\nfunction getLineSelection({ value, selection }, isForward) {\r\n const [from, to] = selection;\r\n if (from !== to) {\r\n return [from, to];\r\n }\r\n const nearestBreak = isForward\r\n ? value.slice(from).indexOf('\\n') + 1 || value.length\r\n : value.slice(0, to).lastIndexOf('\\n') + 1;\r\n const selectFrom = isForward ? from : nearestBreak;\r\n const selectTo = isForward ? nearestBreak : to;\r\n return [selectFrom, selectTo];\r\n}\n\nfunction getNotEmptySelection({ value, selection }, isForward) {\r\n const [from, to] = selection;\r\n if (from !== to) {\r\n return [from, to];\r\n }\r\n const notEmptySelection = isForward ? [from, to + 1] : [from - 1, to];\r\n return notEmptySelection.map(x => Math.min(Math.max(x, 0), value.length));\r\n}\n\nconst TRAILING_SPACES_REG = /\\s+$/g;\r\nconst LEADING_SPACES_REG = /^\\s+/g;\r\nconst SPACE_REG = /\\s/;\r\nfunction getWordSelection({ value, selection }, isForward) {\r\n const [from, to] = selection;\r\n if (from !== to) {\r\n return [from, to];\r\n }\r\n if (isForward) {\r\n const valueAfterSelectionStart = value.slice(from);\r\n const [leadingSpaces] = valueAfterSelectionStart.match(LEADING_SPACES_REG) || [\r\n '',\r\n ];\r\n const nearestWordEndIndex = valueAfterSelectionStart\r\n .trimStart()\r\n .search(SPACE_REG);\r\n return [\r\n from,\r\n nearestWordEndIndex !== -1\r\n ? from + leadingSpaces.length + nearestWordEndIndex\r\n : value.length,\r\n ];\r\n }\r\n const valueBeforeSelectionEnd = value.slice(0, to);\r\n const [trailingSpaces] = valueBeforeSelectionEnd.match(TRAILING_SPACES_REG) || [''];\r\n const selectedWordLength = valueBeforeSelectionEnd\r\n .trimEnd()\r\n .split('')\r\n .reverse()\r\n .findIndex(char => char.match(SPACE_REG));\r\n return [\r\n selectedWordLength !== -1 ? to - trailingSpaces.length - selectedWordLength : 0,\r\n to,\r\n ];\r\n}\n\n/* eslint-disable @typescript-eslint/ban-types */\r\n/**\r\n * @internal\r\n */\r\nfunction maskitoPipe(processors = []) {\r\n return (initialData, ...readonlyArgs) => processors.reduce((data, fn) => (Object.assign(Object.assign({}, data), fn(data, ...readonlyArgs))), initialData);\r\n}\n\nfunction maskitoTransform(valueOrState, maskitoOptions) {\r\n const options = Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), maskitoOptions);\r\n const preprocessor = maskitoPipe(options.preprocessors);\r\n const postprocessor = maskitoPipe(options.postprocessors);\r\n const initialElementState = typeof valueOrState === 'string'\r\n ? { value: valueOrState, selection: [0, 0] }\r\n : valueOrState;\r\n const { elementState } = preprocessor({ elementState: initialElementState, data: '' }, 'validation');\r\n const maskModel = new MaskModel(elementState, options);\r\n const { value, selection } = postprocessor(maskModel, initialElementState);\r\n return typeof valueOrState === 'string' ? value : { value, selection };\r\n}\n\nfunction maskitoInitialCalibrationPlugin(customOptions) {\r\n return (element, options) => {\r\n const from = element.selectionStart || 0;\r\n const to = element.selectionEnd || 0;\r\n maskitoUpdateElement(element, {\r\n value: maskitoTransform(element.value, customOptions || options),\r\n selection: [from, to],\r\n });\r\n };\r\n}\n\nfunction maskitoStrictCompositionPlugin() {\r\n return (element, maskitoOptions) => {\r\n const listener = (event) => {\r\n if (event.inputType !== 'insertCompositionText') {\r\n return;\r\n }\r\n const selection = [\r\n element.selectionStart || 0,\r\n element.selectionEnd || 0,\r\n ];\r\n const elementState = {\r\n selection,\r\n value: element.value,\r\n };\r\n const validatedState = maskitoTransform(elementState, maskitoOptions);\r\n if (!areElementStatesEqual(elementState, validatedState)) {\r\n event.preventDefault();\r\n maskitoUpdateElement(element, validatedState);\r\n }\r\n };\r\n element.addEventListener('input', listener);\r\n return () => element.removeEventListener('input', listener);\r\n };\r\n}\n\nclass Maskito extends MaskHistory {\r\n constructor(element, maskitoOptions) {\r\n super();\r\n this.element = element;\r\n this.maskitoOptions = maskitoOptions;\r\n this.isTextArea = this.element.nodeName === 'TEXTAREA';\r\n this.eventListener = new EventListener(this.element);\r\n this.options = Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), this.maskitoOptions);\r\n this.preprocessor = maskitoPipe(this.options.preprocessors);\r\n this.postprocessor = maskitoPipe(this.options.postprocessors);\r\n this.teardowns = this.options.plugins.map(plugin => plugin(this.element, this.options));\r\n this.updateHistory(this.elementState);\r\n this.eventListener.listen('keydown', event => {\r\n if (isRedo(event)) {\r\n event.preventDefault();\r\n return this.redo();\r\n }\r\n if (isUndo(event)) {\r\n event.preventDefault();\r\n return this.undo();\r\n }\r\n });\r\n this.eventListener.listen('beforeinput', event => {\r\n var _a;\r\n const isForward = event.inputType.includes('Forward');\r\n this.updateHistory(this.elementState);\r\n switch (event.inputType) {\r\n // historyUndo/historyRedo will not be triggered if value was modified programmatically\r\n case 'historyUndo':\r\n event.preventDefault();\r\n return this.undo();\r\n case 'historyRedo':\r\n event.preventDefault();\r\n return this.redo();\r\n case 'deleteByCut':\r\n case 'deleteContentBackward':\r\n case 'deleteContentForward':\r\n return this.handleDelete({\r\n event,\r\n isForward,\r\n selection: getNotEmptySelection(this.elementState, isForward),\r\n });\r\n case 'deleteWordForward':\r\n case 'deleteWordBackward':\r\n return this.handleDelete({\r\n event,\r\n isForward,\r\n selection: getWordSelection(this.elementState, isForward),\r\n force: true,\r\n });\r\n case 'deleteSoftLineBackward':\r\n case 'deleteSoftLineForward':\r\n case 'deleteHardLineBackward':\r\n case 'deleteHardLineForward':\r\n return this.handleDelete({\r\n event,\r\n isForward,\r\n selection: getLineSelection(this.elementState, isForward),\r\n force: true,\r\n });\r\n case 'insertCompositionText':\r\n return; // will be handled inside `compositionend` event\r\n case 'insertLineBreak':\r\n case 'insertParagraph':\r\n return this.handleEnter(event);\r\n case 'insertFromPaste':\r\n case 'insertText':\r\n case 'insertFromDrop':\r\n default:\r\n return this.handleInsert(event, event.data ||\r\n (\r\n // `event.data` for `contentEditable` is always `null` for paste/drop events\r\n (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('text/plain')) ||\r\n '');\r\n }\r\n });\r\n this.eventListener.listen('input', ({ inputType }) => {\r\n if (inputType === 'insertCompositionText') {\r\n return; // will be handled inside `compositionend` event\r\n }\r\n this.ensureValueFitsMask();\r\n this.updateHistory(this.elementState);\r\n });\r\n this.eventListener.listen('compositionend', () => {\r\n this.ensureValueFitsMask();\r\n this.updateHistory(this.elementState);\r\n });\r\n }\r\n get elementState() {\r\n const { value, selectionStart, selectionEnd } = this.element;\r\n return {\r\n value,\r\n selection: [selectionStart || 0, selectionEnd || 0],\r\n };\r\n }\r\n get maxLength() {\r\n const { maxLength } = this.element;\r\n return maxLength === -1 ? Infinity : maxLength;\r\n }\r\n destroy() {\r\n this.eventListener.destroy();\r\n this.teardowns.forEach(teardown => teardown === null || teardown === void 0 ? void 0 : teardown());\r\n }\r\n updateElementState({ value, selection }, eventInit = {\r\n inputType: 'insertText',\r\n data: null,\r\n }) {\r\n const initialValue = this.elementState.value;\r\n this.updateValue(value);\r\n this.updateSelectionRange(selection);\r\n if (initialValue !== value) {\r\n this.dispatchInputEvent(eventInit);\r\n }\r\n }\r\n updateSelectionRange([from, to]) {\r\n var _a;\r\n const { element } = this;\r\n if (element.matches(':focus') &&\r\n (element.selectionStart !== from || element.selectionEnd !== to)) {\r\n (_a = element.setSelectionRange) === null || _a === void 0 ? void 0 : _a.call(element, from, to);\r\n }\r\n }\r\n updateValue(value) {\r\n this.element.value = value;\r\n }\r\n ensureValueFitsMask() {\r\n this.updateElementState(maskitoTransform(this.elementState, this.options));\r\n }\r\n dispatchInputEvent(eventInit = {\r\n inputType: 'insertText',\r\n data: null,\r\n }) {\r\n if (globalThis.InputEvent) {\r\n this.element.dispatchEvent(new InputEvent('input', Object.assign(Object.assign({}, eventInit), { bubbles: true, cancelable: false })));\r\n }\r\n }\r\n handleDelete({ event, selection, isForward, force = false, }) {\r\n const initialState = {\r\n value: this.elementState.value,\r\n selection,\r\n };\r\n const [initialFrom, initialTo] = initialState.selection;\r\n const { elementState } = this.preprocessor({\r\n elementState: initialState,\r\n data: '',\r\n }, isForward ? 'deleteForward' : 'deleteBackward');\r\n const maskModel = new MaskModel(elementState, this.options);\r\n const [from, to] = elementState.selection;\r\n maskModel.deleteCharacters([from, to]);\r\n const newElementState = this.postprocessor(maskModel, initialState);\r\n const newPossibleValue = initialState.value.slice(0, initialFrom) +\r\n initialState.value.slice(initialTo);\r\n if (newPossibleValue === newElementState.value &&\r\n !force &&\r\n !this.element.isContentEditable) {\r\n return;\r\n }\r\n event.preventDefault();\r\n if (areElementValuesEqual(initialState, elementState, maskModel, newElementState)) {\r\n // User presses Backspace/Delete for the fixed value\r\n return this.updateSelectionRange(isForward ? [to, to] : [from, from]);\r\n }\r\n this.updateElementState(newElementState, {\r\n inputType: event.inputType,\r\n data: null,\r\n });\r\n this.updateHistory(newElementState);\r\n }\r\n handleInsert(event, data) {\r\n const initialElementState = this.elementState;\r\n const { elementState, data: insertedText = data } = this.preprocessor({\r\n data,\r\n elementState: initialElementState,\r\n }, 'insert');\r\n const maskModel = new MaskModel(elementState, this.options);\r\n try {\r\n maskModel.addCharacters(elementState.selection, insertedText);\r\n }\r\n catch (_a) {\r\n return event.preventDefault();\r\n }\r\n const [from, to] = elementState.selection;\r\n const newPossibleValue = initialElementState.value.slice(0, from) +\r\n data +\r\n initialElementState.value.slice(to);\r\n const newElementState = this.postprocessor(maskModel, initialElementState);\r\n if (newElementState.value.length > this.maxLength) {\r\n return event.preventDefault();\r\n }\r\n if (newPossibleValue !== newElementState.value ||\r\n this.element.isContentEditable) {\r\n event.preventDefault();\r\n this.updateElementState(newElementState, {\r\n data,\r\n inputType: event.inputType,\r\n });\r\n this.updateHistory(newElementState);\r\n }\r\n }\r\n handleEnter(event) {\r\n if (this.isTextArea || this.element.isContentEditable) {\r\n this.handleInsert(event, '\\n');\r\n }\r\n }\r\n}\n\nexport { MASKITO_DEFAULT_ELEMENT_PREDICATE, MASKITO_DEFAULT_OPTIONS, Maskito, maskitoAdaptContentEditable, maskitoInitialCalibrationPlugin, maskitoPipe, maskitoStrictCompositionPlugin, maskitoTransform, maskitoUpdateElement };\n","import { maskitoUpdateElement, MASKITO_DEFAULT_OPTIONS, maskitoTransform } from '@maskito/core';\n\n/**\r\n * Clamps a value between two inclusive limits\r\n *\r\n * @param value\r\n * @param min lower limit\r\n * @param max upper limit\r\n */\r\nfunction clamp(value, min, max) {\r\n const clampedValue = Math.min(Number(max), Math.max(Number(min), Number(value)));\r\n return (value instanceof Date ? new Date(clampedValue) : clampedValue);\r\n}\n\nfunction countDigits(str) {\r\n return str.replaceAll(/\\W/g, '').length;\r\n}\n\nfunction appendDate(initialDate, { day, month, year } = {}) {\r\n const date = new Date(initialDate);\r\n if (day) {\r\n date.setDate(date.getDate() + day);\r\n }\r\n if (month) {\r\n date.setMonth(date.getMonth() + month);\r\n }\r\n if (year) {\r\n date.setFullYear(date.getFullYear() + year);\r\n }\r\n return date;\r\n}\n\nconst getDateSegmentValueLength = (dateString) => {\r\n var _a, _b, _c;\r\n return ({\r\n day: ((_a = dateString.match(/d/g)) === null || _a === void 0 ? void 0 : _a.length) || 0,\r\n month: ((_b = dateString.match(/m/g)) === null || _b === void 0 ? void 0 : _b.length) || 0,\r\n year: ((_c = dateString.match(/y/g)) === null || _c === void 0 ? void 0 : _c.length) || 0,\r\n });\r\n};\n\nfunction dateToSegments(date) {\r\n return {\r\n day: String(date.getDate()).padStart(2, '0'),\r\n month: String(date.getMonth() + 1).padStart(2, '0'),\r\n year: String(date.getFullYear()).padStart(4, '0'),\r\n hours: String(date.getHours()).padStart(2, '0'),\r\n minutes: String(date.getMinutes()).padStart(2, '0'),\r\n seconds: String(date.getSeconds()).padStart(2, '0'),\r\n milliseconds: String(date.getMilliseconds()).padStart(3, '0'),\r\n };\r\n}\n\nfunction getFirstCompleteDate(dateString, dateModeTemplate) {\r\n const digitsInDate = countDigits(dateModeTemplate);\r\n const [completeDate = ''] = dateString.match(new RegExp(`(\\\\D*\\\\d){${digitsInDate}}`)) || [];\r\n return completeDate;\r\n}\n\nfunction isDateStringComplete(dateString, dateModeTemplate) {\r\n if (dateString.length < dateModeTemplate.length) {\r\n return false;\r\n }\r\n return dateString.split(/\\D/).every(segment => !segment.match(/^0+$/));\r\n}\n\nfunction parseDateRangeString(dateRange, dateModeTemplate, rangeSeparator) {\r\n const digitsInDate = countDigits(dateModeTemplate);\r\n return (dateRange\r\n .replace(rangeSeparator, '')\r\n .match(new RegExp(`(\\\\D*\\\\d[^\\\\d\\\\s]*){1,${digitsInDate}}`, 'g')) || []);\r\n}\n\nfunction parseDateString(dateString, fullMode) {\r\n const cleanMode = fullMode.replaceAll(/[^dmy]/g, '');\r\n const onlyDigitsDate = dateString.replaceAll(/\\D+/g, '');\r\n const dateSegments = {\r\n day: onlyDigitsDate.slice(cleanMode.indexOf('d'), cleanMode.lastIndexOf('d') + 1),\r\n month: onlyDigitsDate.slice(cleanMode.indexOf('m'), cleanMode.lastIndexOf('m') + 1),\r\n year: onlyDigitsDate.slice(cleanMode.indexOf('y'), cleanMode.lastIndexOf('y') + 1),\r\n };\r\n return Object.fromEntries(Object.entries(dateSegments)\r\n .filter(([_, value]) => Boolean(value))\r\n .sort(([a], [b]) => fullMode.toLowerCase().indexOf(a[0]) >\r\n fullMode.toLowerCase().indexOf(b[0])\r\n ? 1\r\n : -1));\r\n}\n\nfunction segmentsToDate(parsedDate, parsedTime) {\r\n var _a, _b, _c, _d, _e, _f, _g;\r\n const year = ((_a = parsedDate.year) === null || _a === void 0 ? void 0 : _a.length) === 2 ? `20${parsedDate.year}` : parsedDate.year;\r\n const date = new Date(Number(year !== null && year !== void 0 ? year : '0'), Number((_b = parsedDate.month) !== null && _b !== void 0 ? _b : '1') - 1, Number((_c = parsedDate.day) !== null && _c !== void 0 ? _c : '1'), Number((_d = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.hours) !== null && _d !== void 0 ? _d : '0'), Number((_e = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.minutes) !== null && _e !== void 0 ? _e : '0'), Number((_f = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.seconds) !== null && _f !== void 0 ? _f : '0'), Number((_g = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.milliseconds) !== null && _g !== void 0 ? _g : '0'));\r\n // needed for years less than 1900\r\n date.setFullYear(Number(year !== null && year !== void 0 ? year : '0'));\r\n return date;\r\n}\n\nconst DATE_TIME_SEPARATOR = ', ';\n\nfunction toDateString({ day, month, year, hours, minutes, seconds, milliseconds, }, { dateMode, dateTimeSeparator = DATE_TIME_SEPARATOR, timeMode, }) {\r\n var _a;\r\n const safeYear = ((_a = dateMode.match(/y/g)) === null || _a === void 0 ? void 0 : _a.length) === 2 ? year === null || year === void 0 ? void 0 : year.slice(-2) : year;\r\n const fullMode = dateMode + (timeMode ? dateTimeSeparator + timeMode : '');\r\n return fullMode\r\n .replaceAll(/d+/g, day !== null && day !== void 0 ? day : '')\r\n .replaceAll(/m+/g, month !== null && month !== void 0 ? month : '')\r\n .replaceAll(/y+/g, safeYear !== null && safeYear !== void 0 ? safeYear : '')\r\n .replaceAll(/H+/g, hours !== null && hours !== void 0 ? hours : '')\r\n .replaceAll('MSS', milliseconds !== null && milliseconds !== void 0 ? milliseconds : '')\r\n .replaceAll(/M+/g, minutes !== null && minutes !== void 0 ? minutes : '')\r\n .replaceAll(/S+/g, seconds !== null && seconds !== void 0 ? seconds : '')\r\n .replaceAll(/^\\D+/g, '')\r\n .replaceAll(/\\D+$/g, '');\r\n}\n\nconst DATE_SEGMENTS_MAX_VALUES = {\r\n day: 31,\r\n month: 12,\r\n year: 9999,\r\n};\n\nconst DEFAULT_DECIMAL_PSEUDO_SEPARATORS = ['.', ',', 'б', 'ю'];\n\nconst DEFAULT_MIN_DATE = new Date('0001-01-01');\r\nconst DEFAULT_MAX_DATE = new Date('9999-12-31');\n\nconst DEFAULT_TIME_SEGMENT_MAX_VALUES = {\r\n hours: 23,\r\n minutes: 59,\r\n seconds: 59,\r\n milliseconds: 999,\r\n};\n\nconst TIME_FIXED_CHARACTERS = [':', '.'];\n\nconst TIME_SEGMENT_VALUE_LENGTHS = {\r\n hours: 2,\r\n minutes: 2,\r\n seconds: 2,\r\n milliseconds: 3,\r\n};\n\n/**\r\n * {@link https://unicode-table.com/en/00A0/ Non-breaking space}.\r\n */\r\nconst CHAR_NO_BREAK_SPACE = '\\u00A0';\r\n/**\r\n * {@link https://symbl.cc/en/200B/ Zero width space}.\r\n */\r\nconst CHAR_ZERO_WIDTH_SPACE = '\\u200B';\r\n/**\r\n * {@link https://unicode-table.com/en/2013/ EN dash}\r\n * is used to indicate a range of numbers or a span of time.\r\n * @example 2006–2022\r\n */\r\nconst CHAR_EN_DASH = '\\u2013';\r\n/**\r\n * {@link https://unicode-table.com/en/2014/ EM dash}\r\n * is used to mark a break in a sentence.\r\n * @example Taiga UI — powerful set of open source components for Angular\r\n * ___\r\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_HYPHEN}!\r\n */\r\nconst CHAR_EM_DASH = '\\u2014';\r\n/**\r\n * {@link https://unicode-table.com/en/002D/ Hyphen (minus sign)}\r\n * is used to combine words.\r\n * @example well-behaved\r\n * ___\r\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_EM_DASH}!\r\n */\r\nconst CHAR_HYPHEN = '\\u002D';\r\n/**\r\n * {@link https://unicode-table.com/en/2212/ Minus}\r\n * is used as math operator symbol or before negative digits.\r\n * ---\r\n * Can be used as `−`. Don't confuse with {@link CHAR_HYPHEN}\r\n */\r\nconst CHAR_MINUS = '\\u2212';\r\n/**\r\n * {@link https://symbl.cc/en/30FC/ Katakana-Hiragana Prolonged Sound Mark}\r\n * is used as prolonged sounds in Japanese.\r\n */\r\nconst CHAR_JP_HYPHEN = '\\u30FC';\r\n/**\r\n * {@link https://symbl.cc/en/003A/ Colon}\r\n * is a punctuation mark that connects parts of a text logically.\r\n * ---\r\n * is also used as separator in time.\r\n */\r\nconst CHAR_COLON = '\\u003A';\r\n/**\r\n * {@link https://symbl.cc/en/FF1A/ Full-width colon}\r\n * is a full-width punctuation mark used to separate parts of a text commonly in Japanese.\r\n */\r\nconst CHAR_JP_COLON = '\\uFF1A';\n\nfunction validateDateString({ dateString, dateModeTemplate, offset, selection: [from, to], }) {\r\n const parsedDate = parseDateString(dateString, dateModeTemplate);\r\n const dateSegments = Object.entries(parsedDate);\r\n const validatedDateSegments = {};\r\n for (const [segmentName, segmentValue] of dateSegments) {\r\n const validatedDate = toDateString(validatedDateSegments, {\r\n dateMode: dateModeTemplate,\r\n });\r\n const maxSegmentValue = DATE_SEGMENTS_MAX_VALUES[segmentName];\r\n const fantomSeparator = validatedDate.length && 1;\r\n const lastSegmentDigitIndex = offset +\r\n validatedDate.length +\r\n fantomSeparator +\r\n getDateSegmentValueLength(dateModeTemplate)[segmentName];\r\n const isLastSegmentDigitAdded = lastSegmentDigitIndex >= from && lastSegmentDigitIndex === to;\r\n if (isLastSegmentDigitAdded && Number(segmentValue) > Number(maxSegmentValue)) {\r\n // 3|1.10.2010 => Type 9 => 3|1.10.2010\r\n return { validatedDateString: '', updatedSelection: [from, to] }; // prevent changes\r\n }\r\n if (isLastSegmentDigitAdded && Number(segmentValue) < 1) {\r\n // 31.0|1.2010 => Type 0 => 31.0|1.2010\r\n return { validatedDateString: '', updatedSelection: [from, to] }; // prevent changes\r\n }\r\n validatedDateSegments[segmentName] = segmentValue;\r\n }\r\n const validatedDateString = toDateString(validatedDateSegments, {\r\n dateMode: dateModeTemplate,\r\n });\r\n const addedDateSegmentSeparators = validatedDateString.length - dateString.length;\r\n return {\r\n validatedDateString,\r\n updatedSelection: [\r\n from + addedDateSegmentSeparators,\r\n to + addedDateSegmentSeparators,\r\n ],\r\n };\r\n}\n\n/**\r\n * Copy-pasted solution from lodash\r\n * @see https://lodash.com/docs/4.17.15#escapeRegExp\r\n */\r\nconst reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\r\nconst reHasRegExpChar = new RegExp(reRegExpChar.source);\r\nfunction escapeRegExp(str) {\r\n return str && reHasRegExpChar.test(str) ? str.replaceAll(reRegExpChar, '\\\\$&') : str;\r\n}\n\nfunction extractAffixes(value, { prefix, postfix }) {\r\n var _a, _b;\r\n const prefixRegExp = new RegExp(`^${escapeRegExp(prefix)}`);\r\n const postfixRegExp = new RegExp(`${escapeRegExp(postfix)}$`);\r\n const [extractedPrefix = ''] = (_a = value.match(prefixRegExp)) !== null && _a !== void 0 ? _a : [];\r\n const [extractedPostfix = ''] = (_b = value.match(postfixRegExp)) !== null && _b !== void 0 ? _b : [];\r\n const cleanValue = value.replace(prefixRegExp, '').replace(postfixRegExp, '');\r\n return { extractedPrefix, extractedPostfix, cleanValue };\r\n}\n\nfunction findCommonBeginningSubstr(a, b) {\r\n let res = '';\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i] !== b[i]) {\r\n return res;\r\n }\r\n res += a[i];\r\n }\r\n return res;\r\n}\n\nfunction identity(x) {\r\n return x;\r\n}\n\nfunction isEmpty(entity) {\r\n return !entity || (typeof entity === 'object' && Object.keys(entity).length === 0);\r\n}\n\nfunction padWithZeroesUntilValid(segmentValue, paddedMaxValue, prefixedZeroesCount = 0) {\r\n if (Number(segmentValue.padEnd(paddedMaxValue.length, '0')) <= Number(paddedMaxValue)) {\r\n return { validatedSegmentValue: segmentValue, prefixedZeroesCount };\r\n }\r\n if (segmentValue.endsWith('0')) {\r\n // 00:|00 => Type 9 => 00:09|\r\n return padWithZeroesUntilValid(`0${segmentValue.slice(0, paddedMaxValue.length - 1)}`, paddedMaxValue, prefixedZeroesCount + 1);\r\n }\r\n // |19:00 => Type 2 => 2|0:00\r\n return padWithZeroesUntilValid(`${segmentValue.slice(0, paddedMaxValue.length - 1)}0`, paddedMaxValue, prefixedZeroesCount);\r\n}\n\n/**\r\n * Replace fullwidth colon with half width colon\r\n * @param fullWidthColon full width colon\r\n * @returns processed half width colon\r\n */\r\nfunction toHalfWidthColon(fullWidthColon) {\r\n return fullWidthColon.replaceAll(new RegExp(CHAR_JP_COLON, 'g'), CHAR_COLON);\r\n}\n\n/**\r\n * Replace fullwidth numbers with half width number\r\n * @param fullWidthNumber full width number\r\n * @returns processed half width number\r\n */\r\nfunction toHalfWidthNumber(fullWidthNumber) {\r\n return fullWidthNumber.replaceAll(/[0-9]/g, s => String.fromCharCode(s.charCodeAt(0) - 0xfee0));\r\n}\n\n/**\r\n * Convert full width colon (:) to half width one (:)\r\n */\r\nfunction createColonConvertPreprocessor() {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n return {\r\n elementState: {\r\n selection,\r\n value: toHalfWidthColon(value),\r\n },\r\n data: toHalfWidthColon(data),\r\n };\r\n };\r\n}\n\nfunction createDateSegmentsZeroPaddingPostprocessor({ dateModeTemplate, dateSegmentSeparator, splitFn, uniteFn, }) {\r\n return ({ value, selection }) => {\r\n var _a;\r\n const [from, to] = selection;\r\n const { dateStrings, restPart = '' } = splitFn(value);\r\n const validatedDateStrings = [];\r\n let caretShift = 0;\r\n dateStrings.forEach(dateString => {\r\n const parsedDate = parseDateString(dateString, dateModeTemplate);\r\n const dateSegments = Object.entries(parsedDate);\r\n const validatedDateSegments = dateSegments.reduce((acc, [segmentName, segmentValue]) => {\r\n const { validatedSegmentValue, prefixedZeroesCount } = padWithZeroesUntilValid(segmentValue, `${DATE_SEGMENTS_MAX_VALUES[segmentName]}`);\r\n caretShift += prefixedZeroesCount;\r\n return Object.assign(Object.assign({}, acc), { [segmentName]: validatedSegmentValue });\r\n }, {});\r\n validatedDateStrings.push(toDateString(validatedDateSegments, { dateMode: dateModeTemplate }));\r\n });\r\n const validatedValue = uniteFn(validatedDateStrings, value) +\r\n (((_a = dateStrings[dateStrings.length - 1]) === null || _a === void 0 ? void 0 : _a.endsWith(dateSegmentSeparator))\r\n ? dateSegmentSeparator\r\n : '') +\r\n restPart;\r\n if (caretShift && validatedValue[to + 1] === dateSegmentSeparator) {\r\n /**\r\n * If `caretShift` > 0, it means that time segment was padded with zero.\r\n * It is only possible if any character insertion happens.\r\n * If caret is before `dateSegmentSeparator` => it should be moved after `dateSegmentSeparator`.\r\n */\r\n caretShift++;\r\n }\r\n return {\r\n selection: [from + caretShift, to + caretShift],\r\n value: validatedValue,\r\n };\r\n };\r\n}\n\n/**\r\n * It replaces pseudo range separators with valid one.\r\n * @example '01.01.2000_11.11.2000' -> '01.01.2000 - 01.01.2000'\r\n * @example '01.01.2000_23:59' -> '01.01.2000, 23:59'\r\n */\r\nfunction createFirstDateEndSeparatorPreprocessor({ dateModeTemplate, firstDateEndSeparator, dateSegmentSeparator, pseudoFirstDateEndSeparators, }) {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const firstCompleteDate = getFirstCompleteDate(value, dateModeTemplate);\r\n const pseudoSeparators = pseudoFirstDateEndSeparators.filter(x => !firstDateEndSeparator.includes(x) && x !== dateSegmentSeparator);\r\n const pseudoSeparatorsRE = new RegExp(`[${pseudoSeparators.join('')}]`, 'gi');\r\n return {\r\n elementState: {\r\n selection,\r\n value: firstCompleteDate && value.length > firstCompleteDate.length\r\n ? firstCompleteDate +\r\n value\r\n .slice(firstCompleteDate.length)\r\n .replace(/^[\\D\\s]*/, firstDateEndSeparator)\r\n : value,\r\n },\r\n data: data.replace(pseudoSeparatorsRE, firstDateEndSeparator),\r\n };\r\n };\r\n}\n\n/**\r\n * Convert full width numbers like 1, 2 to half width numbers 1, 2\r\n */\r\nfunction createFullWidthToHalfWidthPreprocessor() {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n return {\r\n elementState: {\r\n selection,\r\n value: toHalfWidthNumber(value),\r\n },\r\n data: toHalfWidthNumber(data),\r\n };\r\n };\r\n}\n\nfunction raiseSegmentValueToMin(segments, fullMode) {\r\n const segmentsLength = getDateSegmentValueLength(fullMode);\r\n return Object.fromEntries(Object.entries(segments).map(([key, value]) => {\r\n const segmentLength = segmentsLength[key];\r\n return [\r\n key,\r\n value.length === segmentLength && value.match(/^0+$/)\r\n ? '1'.padStart(segmentLength, '0')\r\n : value,\r\n ];\r\n }));\r\n}\n\nfunction createMinMaxDatePostprocessor({ dateModeTemplate, min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE, rangeSeparator = '', dateSegmentSeparator = '.', }) {\r\n return ({ value, selection }) => {\r\n const endsWithRangeSeparator = rangeSeparator && value.endsWith(rangeSeparator);\r\n const dateStrings = parseDateRangeString(value, dateModeTemplate, rangeSeparator);\r\n let validatedValue = '';\r\n for (const dateString of dateStrings) {\r\n validatedValue += validatedValue ? rangeSeparator : '';\r\n const parsedDate = parseDateString(dateString, dateModeTemplate);\r\n if (!isDateStringComplete(dateString, dateModeTemplate)) {\r\n const fixedDate = raiseSegmentValueToMin(parsedDate, dateModeTemplate);\r\n const fixedValue = toDateString(fixedDate, { dateMode: dateModeTemplate });\r\n const tail = dateString.endsWith(dateSegmentSeparator)\r\n ? dateSegmentSeparator\r\n : '';\r\n validatedValue += fixedValue + tail;\r\n continue;\r\n }\r\n const date = segmentsToDate(parsedDate);\r\n const clampedDate = clamp(date, min, max);\r\n validatedValue += toDateString(dateToSegments(clampedDate), {\r\n dateMode: dateModeTemplate,\r\n });\r\n }\r\n return {\r\n selection,\r\n value: validatedValue + (endsWithRangeSeparator ? rangeSeparator : ''),\r\n };\r\n };\r\n}\n\nfunction normalizeDatePreprocessor({ dateModeTemplate, dateSegmentsSeparator, rangeSeparator = '', dateTimeSeparator = DATE_TIME_SEPARATOR, }) {\r\n return ({ elementState, data }) => {\r\n const separator = rangeSeparator\r\n ? new RegExp(`${rangeSeparator}|-`)\r\n : dateTimeSeparator;\r\n const possibleDates = data.split(separator);\r\n const dates = data.includes(dateTimeSeparator)\r\n ? [possibleDates[0]]\r\n : possibleDates;\r\n if (dates.every(date => date.trim().split(/\\D/).filter(Boolean).length ===\r\n dateModeTemplate.split(dateSegmentsSeparator).length)) {\r\n const newData = dates\r\n .map(date => normalizeDateString(date, dateModeTemplate, dateSegmentsSeparator))\r\n .join(rangeSeparator);\r\n return {\r\n elementState,\r\n data: `${newData}${data.includes(dateTimeSeparator)\r\n ? dateTimeSeparator + possibleDates[1] || ''\r\n : ''}`,\r\n };\r\n }\r\n return { elementState, data };\r\n };\r\n}\r\nfunction normalizeDateString(dateString, template, separator) {\r\n const dateSegments = dateString.split(/\\D/).filter(Boolean);\r\n const templateSegments = template.split(separator);\r\n const normalizedSegments = dateSegments.map((segment, index) => index === templateSegments.length - 1\r\n ? segment\r\n : segment.padStart(templateSegments[index].length, '0'));\r\n return normalizedSegments.join(separator);\r\n}\n\nfunction maskitoPostfixPostprocessorGenerator(postfix) {\r\n const postfixRE = new RegExp(`${escapeRegExp(postfix)}$`);\r\n return postfix\r\n ? ({ value, selection }, initialElementState) => {\r\n if (!value && !initialElementState.value.endsWith(postfix)) {\r\n // cases when developer wants input to be empty (programmatically)\r\n return { value, selection };\r\n }\r\n if (!value.endsWith(postfix) &&\r\n !initialElementState.value.endsWith(postfix)) {\r\n return { selection, value: value + postfix };\r\n }\r\n const initialValueBeforePostfix = initialElementState.value.replace(postfixRE, '');\r\n const postfixWasModified = initialElementState.selection[1] >= initialValueBeforePostfix.length;\r\n const alreadyExistedValueBeforePostfix = findCommonBeginningSubstr(initialValueBeforePostfix, value);\r\n return {\r\n selection,\r\n value: Array.from(postfix)\r\n .reverse()\r\n .reduce((newValue, char, index) => {\r\n const i = newValue.length - 1 - index;\r\n const isInitiallyMirroredChar = alreadyExistedValueBeforePostfix[i] === char &&\r\n postfixWasModified;\r\n return newValue[i] !== char || isInitiallyMirroredChar\r\n ? newValue.slice(0, i + 1) + char + newValue.slice(i + 1)\r\n : newValue;\r\n }, value),\r\n };\r\n }\r\n : identity;\r\n}\n\nfunction maskitoPrefixPostprocessorGenerator(prefix) {\r\n return prefix\r\n ? ({ value, selection }, initialElementState) => {\r\n if (value.startsWith(prefix) || // already valid\r\n (!value && !initialElementState.value.startsWith(prefix)) // cases when developer wants input to be empty\r\n ) {\r\n return { value, selection };\r\n }\r\n const [from, to] = selection;\r\n const prefixedValue = Array.from(prefix).reduce((modifiedValue, char, i) => modifiedValue[i] === char\r\n ? modifiedValue\r\n : modifiedValue.slice(0, i) + char + modifiedValue.slice(i), value);\r\n const addedCharsCount = prefixedValue.length - value.length;\r\n return {\r\n selection: [from + addedCharsCount, to + addedCharsCount],\r\n value: prefixedValue,\r\n };\r\n }\r\n : identity;\r\n}\n\nfunction createValidDatePreprocessor({ dateModeTemplate, dateSegmentsSeparator, rangeSeparator = '', }) {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n if (data === dateSegmentsSeparator) {\r\n return {\r\n elementState,\r\n data: selection[0] === value.length ? data : '',\r\n };\r\n }\r\n const newCharacters = data.replaceAll(new RegExp(`[^\\\\d${escapeRegExp(dateSegmentsSeparator)}${rangeSeparator}]`, 'g'), '');\r\n if (!newCharacters) {\r\n return { elementState, data: '' };\r\n }\r\n const [from, rawTo] = selection;\r\n let to = rawTo + data.length;\r\n const newPossibleValue = value.slice(0, from) + newCharacters + value.slice(to);\r\n const dateStrings = parseDateRangeString(newPossibleValue, dateModeTemplate, rangeSeparator);\r\n let validatedValue = '';\r\n const hasRangeSeparator = Boolean(rangeSeparator) && newPossibleValue.includes(rangeSeparator);\r\n for (const dateString of dateStrings) {\r\n const { validatedDateString, updatedSelection } = validateDateString({\r\n dateString,\r\n dateModeTemplate,\r\n offset: validatedValue.length,\r\n selection: [from, to],\r\n });\r\n if (dateString && !validatedDateString) {\r\n return { elementState, data: '' }; // prevent changes\r\n }\r\n to = updatedSelection[1];\r\n validatedValue +=\r\n hasRangeSeparator && !validatedValue\r\n ? validatedDateString + rangeSeparator\r\n : validatedDateString;\r\n }\r\n const newData = validatedValue.slice(from, to);\r\n return {\r\n elementState: {\r\n selection,\r\n value: validatedValue.slice(0, from) +\r\n newData\r\n .split(dateSegmentsSeparator)\r\n .map(segment => '0'.repeat(segment.length))\r\n .join(dateSegmentsSeparator) +\r\n validatedValue.slice(to),\r\n },\r\n data: newData,\r\n };\r\n };\r\n}\n\nfunction maskitoEventHandler(name, handler, eventListenerOptions) {\r\n return (element, maskitoOptions) => {\r\n const listener = () => handler(element, maskitoOptions);\r\n element.addEventListener(name, listener, eventListenerOptions);\r\n return () => element.removeEventListener(name, listener, eventListenerOptions);\r\n };\r\n}\n\nfunction maskitoAddOnFocusPlugin(value) {\r\n return maskitoEventHandler('focus', element => {\r\n if (!element.value) {\r\n maskitoUpdateElement(element, value);\r\n }\r\n });\r\n}\n\nfunction maskitoCaretGuard(guard) {\r\n return element => {\r\n const document = element.ownerDocument;\r\n let isPointerDown = 0;\r\n const onPointerDown = () => isPointerDown++;\r\n const onPointerUp = () => {\r\n isPointerDown = Math.max(--isPointerDown, 0);\r\n };\r\n const listener = () => {\r\n if (!element.matches(':focus')) {\r\n return;\r\n }\r\n if (isPointerDown) {\r\n return document.addEventListener('mouseup', listener, {\r\n once: true,\r\n passive: true,\r\n });\r\n }\r\n const start = element.selectionStart || 0;\r\n const end = element.selectionEnd || 0;\r\n const [fromLimit, toLimit] = guard(element.value, [start, end]);\r\n if (fromLimit > start || toLimit < end) {\r\n element.setSelectionRange(clamp(start, fromLimit, toLimit), clamp(end, fromLimit, toLimit));\r\n }\r\n };\r\n document.addEventListener('selectionchange', listener, { passive: true });\r\n element.addEventListener('mousedown', onPointerDown, { passive: true });\r\n document.addEventListener('mouseup', onPointerUp, { passive: true });\r\n return () => {\r\n document.removeEventListener('selectionchange', listener);\r\n document.removeEventListener('mousedown', onPointerDown);\r\n document.removeEventListener('mouseup', onPointerUp);\r\n };\r\n };\r\n}\n\nconst maskitoRejectEvent = element => {\r\n const listener = () => {\r\n const value = element.value;\r\n element.addEventListener('beforeinput', event => {\r\n if (event.defaultPrevented && value === element.value) {\r\n element.dispatchEvent(new CustomEvent('maskitoReject', { bubbles: true }));\r\n }\r\n }, { once: true });\r\n };\r\n element.addEventListener('beforeinput', listener, true);\r\n return () => element.removeEventListener('beforeinput', listener, true);\r\n};\n\nfunction maskitoRemoveOnBlurPlugin(value) {\r\n return maskitoEventHandler('blur', element => {\r\n if (element.value === value) {\r\n maskitoUpdateElement(element, '');\r\n }\r\n });\r\n}\n\nconst noop = () => { };\r\nfunction createTimeSegmentsSteppingPlugin({ step, fullMode, timeSegmentMaxValues, }) {\r\n const segmentsIndexes = createTimeSegmentsIndexes(fullMode);\r\n return step <= 0\r\n ? noop\r\n : element => {\r\n const listener = (event) => {\r\n if (event.key !== 'ArrowUp' && event.key !== 'ArrowDown') {\r\n return;\r\n }\r\n event.preventDefault();\r\n const selectionStart = element.selectionStart || 0;\r\n const activeSegment = getActiveSegment({\r\n segmentsIndexes,\r\n selectionStart,\r\n });\r\n if (!activeSegment) {\r\n return;\r\n }\r\n const updatedValue = updateSegmentValue({\r\n selection: segmentsIndexes.get(activeSegment),\r\n value: element.value,\r\n toAdd: event.key === 'ArrowUp' ? step : -step,\r\n max: timeSegmentMaxValues[activeSegment],\r\n });\r\n maskitoUpdateElement(element, {\r\n value: updatedValue,\r\n selection: [selectionStart, selectionStart],\r\n });\r\n };\r\n element.addEventListener('keydown', listener);\r\n return () => element.removeEventListener('keydown', listener);\r\n };\r\n}\r\nfunction createTimeSegmentsIndexes(fullMode) {\r\n return new Map([\r\n ['hours', getSegmentRange(fullMode, 'HH')],\r\n ['minutes', getSegmentRange(fullMode, 'MM')],\r\n ['seconds', getSegmentRange(fullMode, 'SS')],\r\n ['milliseconds', getSegmentRange(fullMode, 'MSS')],\r\n ]);\r\n}\r\nfunction getSegmentRange(mode, segment) {\r\n const index = mode.indexOf(segment);\r\n return index === -1 ? [-1, -1] : [index, index + segment.length];\r\n}\r\nfunction getActiveSegment({ segmentsIndexes, selectionStart, }) {\r\n for (const [segmentName, segmentRange] of segmentsIndexes.entries()) {\r\n const [from, to] = segmentRange;\r\n if (from <= selectionStart && selectionStart <= to) {\r\n return segmentName;\r\n }\r\n }\r\n return null;\r\n}\r\nfunction updateSegmentValue({ selection, value, toAdd, max, }) {\r\n const [from, to] = selection;\r\n const segmentValue = Number(value.slice(from, to).padEnd(to - from, '0'));\r\n const newSegmentValue = mod(segmentValue + toAdd, max + 1);\r\n return (value.slice(0, from) +\r\n String(newSegmentValue).padStart(to - from, '0') +\r\n value.slice(to, value.length));\r\n}\r\nfunction mod(value, max) {\r\n if (value < 0) {\r\n value += Math.floor(Math.abs(value) / max + 1) * max;\r\n }\r\n return value % max;\r\n}\n\nfunction maskitoWithPlaceholder(placeholder, focusedOnly = false) {\r\n let lastClearValue = '';\r\n const removePlaceholder = (value) => {\r\n for (let i = value.length - 1; i >= lastClearValue.length; i--) {\r\n if (value[i] !== placeholder[i]) {\r\n return value.slice(0, i + 1);\r\n }\r\n }\r\n return value.slice(0, lastClearValue.length);\r\n };\r\n const plugins = [maskitoCaretGuard(value => [0, removePlaceholder(value).length])];\r\n let focused = false;\r\n if (focusedOnly) {\r\n const focus = maskitoEventHandler('focus', element => {\r\n focused = true;\r\n maskitoUpdateElement(element, element.value + placeholder.slice(element.value.length));\r\n }, { capture: true });\r\n const blur = maskitoEventHandler('blur', element => {\r\n focused = false;\r\n maskitoUpdateElement(element, removePlaceholder(element.value));\r\n }, { capture: true });\r\n plugins.push(focus, blur);\r\n }\r\n return {\r\n plugins,\r\n removePlaceholder,\r\n preprocessors: [\r\n ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n return {\r\n elementState: {\r\n selection,\r\n value: removePlaceholder(value),\r\n },\r\n data,\r\n };\r\n },\r\n ],\r\n postprocessors: [\r\n ({ value, selection }, initialElementState) => {\r\n lastClearValue = value;\r\n /**\r\n * If `value` still equals to `initialElementState.value`,\r\n * then it means that value is patched programmatically (from Maskito's plugin or externally).\r\n * In this case, we don't want to mutate value and automatically add placeholder.\r\n * ___\r\n * For example, developer wants to remove manually placeholder (+ do something else with value) on blur.\r\n * Without this condition, placeholder will be unexpectedly added again.\r\n */\r\n return value !== initialElementState.value && (focused || !focusedOnly)\r\n ? {\r\n value: value + placeholder.slice(value.length),\r\n selection,\r\n }\r\n : { value, selection };\r\n },\r\n ],\r\n };\r\n}\n\nfunction createZeroPlaceholdersPreprocessor() {\r\n return ({ elementState }, actionType) => {\r\n const { value, selection } = elementState;\r\n if (!value || isLastChar(value, selection)) {\r\n return { elementState };\r\n }\r\n const [from, to] = selection;\r\n const zeroes = value.slice(from, to).replaceAll(/\\d/g, '0');\r\n const newValue = value.slice(0, from) + zeroes + value.slice(to);\r\n if (actionType === 'validation' || (actionType === 'insert' && from === to)) {\r\n return {\r\n elementState: { selection, value: newValue },\r\n };\r\n }\r\n return {\r\n elementState: {\r\n selection: actionType === 'deleteBackward' || actionType === 'insert'\r\n ? [from, from]\r\n : [to, to],\r\n value: newValue,\r\n },\r\n };\r\n };\r\n}\r\nfunction isLastChar(value, [_, to]) {\r\n return to === value.length;\r\n}\n\nfunction maskitoDateOptionsGenerator({ mode, separator = '.', max, min, }) {\r\n const dateModeTemplate = mode.split('/').join(separator);\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: Array.from(dateModeTemplate).map(char => char === separator ? char : /\\d/), overwriteMode: 'replace', preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createZeroPlaceholdersPreprocessor(),\r\n normalizeDatePreprocessor({\r\n dateModeTemplate,\r\n dateSegmentsSeparator: separator,\r\n }),\r\n createValidDatePreprocessor({\r\n dateModeTemplate,\r\n dateSegmentsSeparator: separator,\r\n }),\r\n ], postprocessors: [\r\n createDateSegmentsZeroPaddingPostprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: separator,\r\n splitFn: value => ({ dateStrings: [value] }),\r\n uniteFn: ([dateString]) => dateString,\r\n }),\r\n createMinMaxDatePostprocessor({\r\n min,\r\n max,\r\n dateModeTemplate,\r\n dateSegmentSeparator: separator,\r\n }),\r\n ] });\r\n}\n\nconst POSSIBLE_DATE_RANGE_SEPARATOR = [\r\n CHAR_HYPHEN,\r\n CHAR_EN_DASH,\r\n CHAR_EM_DASH,\r\n CHAR_MINUS,\r\n CHAR_JP_HYPHEN,\r\n];\n\nfunction createMinMaxRangeLengthPostprocessor({ dateModeTemplate, rangeSeparator, minLength, maxLength, max = DEFAULT_MAX_DATE, }) {\r\n if (isEmpty(minLength) && isEmpty(maxLength)) {\r\n return identity;\r\n }\r\n return ({ value, selection }) => {\r\n const dateStrings = parseDateRangeString(value, dateModeTemplate, rangeSeparator);\r\n if (dateStrings.length !== 2 ||\r\n dateStrings.some(date => !isDateStringComplete(date, dateModeTemplate))) {\r\n return { value, selection };\r\n }\r\n const [fromDate, toDate] = dateStrings.map(dateString => segmentsToDate(parseDateString(dateString, dateModeTemplate)));\r\n const minDistantToDate = appendDate(fromDate, Object.assign(Object.assign({}, minLength), { \r\n // 06.02.2023 - 07.02.2023 => {minLength: {day: 3}} => 06.02.2023 - 08.02.2023\r\n // \"from\"-day is included in the range\r\n day: (minLength === null || minLength === void 0 ? void 0 : minLength.day) && minLength.day - 1 }));\r\n const maxDistantToDate = !isEmpty(maxLength)\r\n ? appendDate(fromDate, Object.assign(Object.assign({}, maxLength), { day: (maxLength === null || maxLength === void 0 ? void 0 : maxLength.day) && maxLength.day - 1 }))\r\n : max;\r\n const minLengthClampedToDate = clamp(toDate, minDistantToDate, max);\r\n const minMaxLengthClampedToDate = minLengthClampedToDate > maxDistantToDate\r\n ? maxDistantToDate\r\n : minLengthClampedToDate;\r\n return {\r\n selection,\r\n value: dateStrings[0] +\r\n rangeSeparator +\r\n toDateString(dateToSegments(minMaxLengthClampedToDate), {\r\n dateMode: dateModeTemplate,\r\n }),\r\n };\r\n };\r\n}\n\nfunction createSwapDatesPostprocessor({ dateModeTemplate, rangeSeparator, }) {\r\n return ({ value, selection }) => {\r\n const dateStrings = parseDateRangeString(value, dateModeTemplate, rangeSeparator);\r\n const isDateRangeComplete = dateStrings.length === 2 &&\r\n dateStrings.every(date => isDateStringComplete(date, dateModeTemplate));\r\n const [from, to] = selection;\r\n const caretAtTheEnd = from >= value.length;\r\n const allValueSelected = from === 0 && to >= value.length; // dropping text inside with a pointer\r\n if (!(caretAtTheEnd || allValueSelected) || !isDateRangeComplete) {\r\n return { value, selection };\r\n }\r\n const [fromDate, toDate] = dateStrings.map(dateString => segmentsToDate(parseDateString(dateString, dateModeTemplate)));\r\n return {\r\n selection,\r\n value: fromDate > toDate ? dateStrings.reverse().join(rangeSeparator) : value,\r\n };\r\n };\r\n}\n\nfunction maskitoDateRangeOptionsGenerator({ mode, min, max, minLength, maxLength, dateSeparator = '.', rangeSeparator = `${CHAR_NO_BREAK_SPACE}${CHAR_EN_DASH}${CHAR_NO_BREAK_SPACE}`, }) {\r\n const dateModeTemplate = mode.split('/').join(dateSeparator);\r\n const dateMask = Array.from(dateModeTemplate).map(char => char === dateSeparator ? char : /\\d/);\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: [...dateMask, ...Array.from(rangeSeparator), ...dateMask], overwriteMode: 'replace', preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createFirstDateEndSeparatorPreprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: dateSeparator,\r\n firstDateEndSeparator: rangeSeparator,\r\n pseudoFirstDateEndSeparators: POSSIBLE_DATE_RANGE_SEPARATOR,\r\n }),\r\n createZeroPlaceholdersPreprocessor(),\r\n normalizeDatePreprocessor({\r\n dateModeTemplate,\r\n rangeSeparator,\r\n dateSegmentsSeparator: dateSeparator,\r\n }),\r\n createValidDatePreprocessor({\r\n dateModeTemplate,\r\n rangeSeparator,\r\n dateSegmentsSeparator: dateSeparator,\r\n }),\r\n ], postprocessors: [\r\n createDateSegmentsZeroPaddingPostprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: dateSeparator,\r\n splitFn: value => ({\r\n dateStrings: parseDateRangeString(value, dateModeTemplate, rangeSeparator),\r\n }),\r\n uniteFn: (validatedDateStrings, initialValue) => validatedDateStrings.reduce((acc, dateString, dateIndex) => acc +\r\n dateString +\r\n (!dateIndex && initialValue.includes(rangeSeparator)\r\n ? rangeSeparator\r\n : ''), ''),\r\n }),\r\n createMinMaxDatePostprocessor({\r\n min,\r\n max,\r\n dateModeTemplate,\r\n rangeSeparator,\r\n dateSegmentSeparator: dateSeparator,\r\n }),\r\n createMinMaxRangeLengthPostprocessor({\r\n dateModeTemplate,\r\n minLength,\r\n maxLength,\r\n max,\r\n rangeSeparator,\r\n }),\r\n createSwapDatesPostprocessor({\r\n dateModeTemplate,\r\n rangeSeparator,\r\n }),\r\n ] });\r\n}\n\nfunction padTimeSegments(timeSegments) {\r\n return Object.fromEntries(Object.entries(timeSegments).map(([segmentName, segmentValue]) => [\r\n segmentName,\r\n `${segmentValue}`.padEnd(TIME_SEGMENT_VALUE_LENGTHS[segmentName], '0'),\r\n ]));\r\n}\n\nconst SEGMENT_FULL_NAME = {\r\n HH: 'hours',\r\n MM: 'minutes',\r\n SS: 'seconds',\r\n MSS: 'milliseconds',\r\n};\r\n/**\r\n * @param timeString can be with/without fixed characters\r\n */\r\nfunction parseTimeString(timeString, timeMode) {\r\n const onlyDigits = timeString.replaceAll(/\\D+/g, '');\r\n let offset = 0;\r\n return Object.fromEntries(timeMode.split(/\\W/).map(segmentAbbr => {\r\n const segmentValue = onlyDigits.slice(offset, offset + segmentAbbr.length);\r\n offset += segmentAbbr.length;\r\n return [SEGMENT_FULL_NAME[segmentAbbr], segmentValue];\r\n }));\r\n}\n\nconst LEADING_NON_DIGITS = /^\\D*/;\r\nconst TRAILING_NON_DIGITS = /\\D*$/;\r\nfunction toTimeString({ hours = '', minutes = '', seconds = '', milliseconds = '', }) {\r\n return `${hours}:${minutes}:${seconds}.${milliseconds}`\r\n .replace(LEADING_NON_DIGITS, '')\r\n .replace(TRAILING_NON_DIGITS, '');\r\n}\n\nconst TRAILING_TIME_SEGMENT_SEPARATOR_REG = new RegExp(`[${TIME_FIXED_CHARACTERS.map(escapeRegExp).join('')}]$`);\r\nfunction validateTimeString({ timeString, paddedMaxValues, offset, selection: [from, to], timeMode, }) {\r\n const parsedTime = parseTimeString(timeString, timeMode);\r\n const possibleTimeSegments = Object.entries(parsedTime);\r\n const validatedTimeSegments = {};\r\n let paddedZeroes = 0;\r\n for (const [segmentName, segmentValue] of possibleTimeSegments) {\r\n const validatedTime = toTimeString(validatedTimeSegments);\r\n const maxSegmentValue = paddedMaxValues[segmentName];\r\n const fantomSeparator = validatedTime.length && 1;\r\n const lastSegmentDigitIndex = offset +\r\n validatedTime.length +\r\n fantomSeparator +\r\n TIME_SEGMENT_VALUE_LENGTHS[segmentName];\r\n const isLastSegmentDigitAdded = lastSegmentDigitIndex >= from && lastSegmentDigitIndex <= to;\r\n if (isLastSegmentDigitAdded && Number(segmentValue) > Number(maxSegmentValue)) {\r\n // 2|0:00 => Type 9 => 2|0:00\r\n return { validatedTimeString: '', updatedTimeSelection: [from, to] }; // prevent changes\r\n }\r\n const { validatedSegmentValue, prefixedZeroesCount } = padWithZeroesUntilValid(segmentValue, `${maxSegmentValue}`);\r\n paddedZeroes += prefixedZeroesCount;\r\n validatedTimeSegments[segmentName] = validatedSegmentValue;\r\n }\r\n const [trailingSegmentSeparator = ''] = timeString.match(TRAILING_TIME_SEGMENT_SEPARATOR_REG) || [];\r\n const validatedTimeString = toTimeString(validatedTimeSegments) + trailingSegmentSeparator;\r\n const addedDateSegmentSeparators = Math.max(validatedTimeString.length - timeString.length, 0);\r\n return {\r\n validatedTimeString,\r\n updatedTimeSelection: [\r\n from + paddedZeroes + addedDateSegmentSeparators,\r\n to + paddedZeroes + addedDateSegmentSeparators,\r\n ],\r\n };\r\n}\n\nfunction isDateTimeStringComplete(dateTimeString, { dateMode, timeMode, dateTimeSeparator = DATE_TIME_SEPARATOR, }) {\r\n return (dateTimeString.length >=\r\n dateMode.length + timeMode.length + dateTimeSeparator.length &&\r\n dateTimeString\r\n .split(dateTimeSeparator)[0]\r\n .split(/\\D/)\r\n .every(segment => !segment.match(/^0+$/)));\r\n}\n\nfunction parseDateTimeString(dateTime, { dateModeTemplate, dateTimeSeparator, }) {\r\n const hasSeparator = dateTime.includes(dateTimeSeparator);\r\n return [\r\n dateTime.slice(0, dateModeTemplate.length),\r\n dateTime.slice(hasSeparator\r\n ? dateModeTemplate.length + dateTimeSeparator.length\r\n : dateModeTemplate.length),\r\n ];\r\n}\n\nfunction createMinMaxDateTimePostprocessor({ dateModeTemplate, timeMode, min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE, dateTimeSeparator, }) {\r\n return ({ value, selection }) => {\r\n const [dateString, timeString] = parseDateTimeString(value, {\r\n dateModeTemplate,\r\n dateTimeSeparator,\r\n });\r\n const parsedDate = parseDateString(dateString, dateModeTemplate);\r\n const parsedTime = parseTimeString(timeString, timeMode);\r\n if (!isDateTimeStringComplete(value, {\r\n dateMode: dateModeTemplate,\r\n timeMode,\r\n dateTimeSeparator,\r\n })) {\r\n const fixedDate = raiseSegmentValueToMin(parsedDate, dateModeTemplate);\r\n const { year, month, day } = isDateStringComplete(dateString, dateModeTemplate)\r\n ? dateToSegments(clamp(segmentsToDate(fixedDate), min, max))\r\n : fixedDate;\r\n const fixedValue = toDateString(Object.assign({ year,\r\n month,\r\n day }, parsedTime), { dateMode: dateModeTemplate, dateTimeSeparator, timeMode });\r\n const tail = value.slice(fixedValue.length);\r\n return {\r\n selection,\r\n value: fixedValue + tail,\r\n };\r\n }\r\n const date = segmentsToDate(parsedDate, parsedTime);\r\n const clampedDate = clamp(date, min, max);\r\n const validatedValue = toDateString(dateToSegments(clampedDate), {\r\n dateMode: dateModeTemplate,\r\n dateTimeSeparator,\r\n timeMode,\r\n });\r\n return {\r\n selection,\r\n value: validatedValue,\r\n };\r\n };\r\n}\n\nfunction createValidDateTimePreprocessor({ dateModeTemplate, dateSegmentsSeparator, dateTimeSeparator, timeMode, }) {\r\n const invalidCharsRegExp = new RegExp(`[^\\\\d${TIME_FIXED_CHARACTERS.map(escapeRegExp).join('')}${escapeRegExp(dateSegmentsSeparator)}]+`);\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n if (data === dateSegmentsSeparator) {\r\n return {\r\n elementState,\r\n data: selection[0] === value.length ? data : '',\r\n };\r\n }\r\n const newCharacters = data.replace(invalidCharsRegExp, '');\r\n if (!newCharacters) {\r\n return { elementState, data: '' };\r\n }\r\n const [from, rawTo] = selection;\r\n let to = rawTo + data.length;\r\n const newPossibleValue = value.slice(0, from) + newCharacters + value.slice(to);\r\n const [dateString, timeString] = parseDateTimeString(newPossibleValue, {\r\n dateModeTemplate,\r\n dateTimeSeparator,\r\n });\r\n let validatedValue = '';\r\n const hasDateTimeSeparator = newPossibleValue.includes(dateTimeSeparator);\r\n const { validatedDateString, updatedSelection } = validateDateString({\r\n dateString,\r\n dateModeTemplate,\r\n offset: 0,\r\n selection: [from, to],\r\n });\r\n if (dateString && !validatedDateString) {\r\n return { elementState, data: '' }; // prevent changes\r\n }\r\n to = updatedSelection[1];\r\n validatedValue += validatedDateString;\r\n const paddedMaxValues = padTimeSegments(DEFAULT_TIME_SEGMENT_MAX_VALUES);\r\n const { validatedTimeString, updatedTimeSelection } = validateTimeString({\r\n timeString,\r\n paddedMaxValues,\r\n offset: validatedValue.length + dateTimeSeparator.length,\r\n selection: [from, to],\r\n timeMode,\r\n });\r\n if (timeString && !validatedTimeString) {\r\n return { elementState, data: '' }; // prevent changes\r\n }\r\n to = updatedTimeSelection[1];\r\n validatedValue += hasDateTimeSeparator\r\n ? dateTimeSeparator + validatedTimeString\r\n : validatedTimeString;\r\n const newData = validatedValue.slice(from, to);\r\n return {\r\n elementState: {\r\n selection,\r\n value: validatedValue.slice(0, from) +\r\n newData\r\n .split(dateSegmentsSeparator)\r\n .map(segment => '0'.repeat(segment.length))\r\n .join(dateSegmentsSeparator) +\r\n validatedValue.slice(to),\r\n },\r\n data: newData,\r\n };\r\n };\r\n}\n\nfunction maskitoDateTimeOptionsGenerator({ dateMode, timeMode, dateSeparator = '.', min, max, dateTimeSeparator = DATE_TIME_SEPARATOR, timeStep = 0, }) {\r\n const dateModeTemplate = dateMode.split('/').join(dateSeparator);\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: [\r\n ...Array.from(dateModeTemplate).map(char => char === dateSeparator ? char : /\\d/),\r\n ...dateTimeSeparator.split(''),\r\n ...Array.from(timeMode).map(char => TIME_FIXED_CHARACTERS.includes(char) ? char : /\\d/),\r\n ], overwriteMode: 'replace', preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createColonConvertPreprocessor(),\r\n createFirstDateEndSeparatorPreprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: dateSeparator,\r\n firstDateEndSeparator: dateTimeSeparator,\r\n pseudoFirstDateEndSeparators: dateTimeSeparator.split(''),\r\n }),\r\n createZeroPlaceholdersPreprocessor(),\r\n normalizeDatePreprocessor({\r\n dateModeTemplate,\r\n dateSegmentsSeparator: dateSeparator,\r\n dateTimeSeparator,\r\n }),\r\n createValidDateTimePreprocessor({\r\n dateModeTemplate,\r\n dateSegmentsSeparator: dateSeparator,\r\n dateTimeSeparator,\r\n timeMode,\r\n }),\r\n ], postprocessors: [\r\n createDateSegmentsZeroPaddingPostprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: dateSeparator,\r\n splitFn: value => {\r\n const [dateString, timeString] = parseDateTimeString(value, {\r\n dateModeTemplate,\r\n dateTimeSeparator,\r\n });\r\n return { dateStrings: [dateString], restPart: timeString };\r\n },\r\n uniteFn: ([validatedDateString], initialValue) => validatedDateString +\r\n (initialValue.includes(dateTimeSeparator) ? dateTimeSeparator : ''),\r\n }),\r\n createMinMaxDateTimePostprocessor({\r\n min,\r\n max,\r\n dateModeTemplate,\r\n timeMode,\r\n dateTimeSeparator,\r\n }),\r\n ], plugins: [\r\n createTimeSegmentsSteppingPlugin({\r\n step: timeStep,\r\n fullMode: `${dateModeTemplate}${dateTimeSeparator}${timeMode}`,\r\n timeSegmentMaxValues: DEFAULT_TIME_SEGMENT_MAX_VALUES,\r\n }),\r\n ] });\r\n}\n\n/**\r\n * It drops prefix and postfix from data\r\n * Needed for case, when prefix or postfix contain decimalSeparator, to ignore it in resulting number\r\n * @example User pastes '{prefix}123.45{postfix}' => 123.45\r\n */\r\nfunction createAffixesFilterPreprocessor({ prefix, postfix, }) {\r\n return ({ elementState, data }) => {\r\n const { cleanValue: cleanData } = extractAffixes(data, {\r\n prefix,\r\n postfix,\r\n });\r\n return {\r\n elementState,\r\n data: cleanData,\r\n };\r\n };\r\n}\n\nfunction generateMaskExpression({ decimalSeparator, isNegativeAllowed, precision, thousandSeparator, prefix, postfix, decimalPseudoSeparators = [], pseudoMinuses = [], minusSign, }) {\r\n const computedPrefix = computeAllOptionalCharsRegExp(prefix);\r\n const digit = '\\\\d';\r\n const optionalMinus = isNegativeAllowed\r\n ? `[${minusSign}${pseudoMinuses.map(x => `\\\\${x}`).join('')}]?`\r\n : '';\r\n const integerPart = thousandSeparator\r\n ? `[${digit}${escapeRegExp(thousandSeparator).replaceAll(/\\s/g, '\\\\s')}]*`\r\n : `[${digit}]*`;\r\n const decimalPart = precision > 0\r\n ? `([${escapeRegExp(decimalSeparator)}${decimalPseudoSeparators\r\n .map(escapeRegExp)\r\n .join('')}]${digit}{0,${Number.isFinite(precision) ? precision : ''}})?`\r\n : '';\r\n const computedPostfix = computeAllOptionalCharsRegExp(postfix);\r\n return new RegExp(`^${computedPrefix}${optionalMinus}${integerPart}${decimalPart}${computedPostfix}$`);\r\n}\r\nfunction computeAllOptionalCharsRegExp(str) {\r\n return str\r\n ? `${str\r\n .split('')\r\n .map(char => `${escapeRegExp(char)}?`)\r\n .join('')}`\r\n : '';\r\n}\n\nfunction maskitoParseNumber(maskedNumber, decimalSeparator = '.') {\r\n const hasNegativeSign = !!maskedNumber.match(new RegExp(`^\\\\D*[${CHAR_MINUS}\\\\${CHAR_HYPHEN}${CHAR_EN_DASH}${CHAR_EM_DASH}${CHAR_JP_HYPHEN}]`));\r\n const escapedDecimalSeparator = escapeRegExp(decimalSeparator);\r\n const unmaskedNumber = maskedNumber\r\n // drop all decimal separators not followed by a digit\r\n .replaceAll(new RegExp(`${escapedDecimalSeparator}(?!\\\\d)`, 'g'), '')\r\n // drop all non-digit characters except decimal separator\r\n .replaceAll(new RegExp(`[^\\\\d${escapedDecimalSeparator}]`, 'g'), '')\r\n .replace(decimalSeparator, '.');\r\n return unmaskedNumber\r\n ? Number((hasNegativeSign ? CHAR_HYPHEN : '') + unmaskedNumber)\r\n : NaN;\r\n}\n\n/**\r\n * Convert number to string with replacing exponent part on decimals\r\n *\r\n * @param value the number\r\n * @return string representation of a number\r\n */\r\nfunction stringifyNumberWithoutExp(value) {\r\n const valueAsString = String(value);\r\n const [numberPart, expPart] = valueAsString.split('e-');\r\n let valueWithoutExp = valueAsString;\r\n if (expPart) {\r\n const [, fractionalPart] = numberPart.split('.');\r\n const decimalDigits = Number(expPart) + ((fractionalPart === null || fractionalPart === void 0 ? void 0 : fractionalPart.length) || 0);\r\n valueWithoutExp = value.toFixed(decimalDigits);\r\n }\r\n return valueWithoutExp;\r\n}\n\nfunction toNumberParts(value, { decimalSeparator, thousandSeparator, }) {\r\n const [integerWithMinus = '', decimalPart = ''] = value.split(decimalSeparator);\r\n const [, minus = '', integerPart = ''] = integerWithMinus.match(new RegExp(`([^\\\\d${escapeRegExp(thousandSeparator)}]+)?(.*)`)) || [];\r\n return { minus, integerPart, decimalPart };\r\n}\n\nfunction validateDecimalPseudoSeparators({ decimalSeparator, thousandSeparator, decimalPseudoSeparators = DEFAULT_DECIMAL_PSEUDO_SEPARATORS, }) {\r\n return decimalPseudoSeparators.filter(char => char !== thousandSeparator && char !== decimalSeparator);\r\n}\n\n/**\r\n * If `decimalZeroPadding` is `true`, it pads decimal part with zeroes\r\n * (until number of digits after decimalSeparator is equal to the `precision`).\r\n * @example 1,42 => (`precision` is equal to 4) => 1,4200.\r\n */\r\nfunction createDecimalZeroPaddingPostprocessor({ decimalSeparator, precision, decimalZeroPadding, prefix, postfix, }) {\r\n if (precision <= 0 || !decimalZeroPadding) {\r\n return identity;\r\n }\r\n return ({ value, selection }) => {\r\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n if (Number.isNaN(maskitoParseNumber(cleanValue, decimalSeparator))) {\r\n return { value, selection };\r\n }\r\n const [integerPart, decimalPart = ''] = cleanValue.split(decimalSeparator);\r\n return {\r\n value: extractedPrefix +\r\n integerPart +\r\n decimalSeparator +\r\n decimalPart.padEnd(precision, '0') +\r\n extractedPostfix,\r\n selection,\r\n };\r\n };\r\n}\n\n/**\r\n * Make textfield empty if there is no integer part and all decimal digits are zeroes.\r\n * @example 0|,00 => Backspace => Empty.\r\n * @example -0|,00 => Backspace => -.\r\n * @example ,42| => Backspace x2 => ,|00 => Backspace => Empty\r\n */\r\nfunction emptyPostprocessor({ prefix, postfix, decimalSeparator, thousandSeparator, }) {\r\n return ({ value, selection }) => {\r\n const [caretIndex] = selection;\r\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const { minus, integerPart, decimalPart } = toNumberParts(cleanValue, {\r\n decimalSeparator,\r\n thousandSeparator,\r\n });\r\n const aloneDecimalSeparator = !integerPart && !decimalPart && cleanValue.includes(decimalSeparator);\r\n if ((!integerPart &&\r\n !Number(decimalPart) &&\r\n caretIndex === (minus + extractedPrefix).length) ||\r\n aloneDecimalSeparator) {\r\n return {\r\n selection,\r\n value: extractedPrefix + minus + extractedPostfix,\r\n };\r\n }\r\n return { value, selection };\r\n };\r\n}\n\n/**\r\n * This preprocessor works only once at initialization phase (when `new Maskito(...)` is executed).\r\n * This preprocessor helps to avoid conflicts during transition from one mask to another (for the same input).\r\n * For example, the developer changes postfix (or other mask's props) during run-time.\r\n * ```\r\n * let maskitoOptions = maskitoNumberOptionsGenerator({postfix: ' year'});\r\n * // [3 seconds later]\r\n * maskitoOptions = maskitoNumberOptionsGenerator({postfix: ' years'});\r\n * ```\r\n */\r\nfunction createInitializationOnlyPreprocessor({ decimalSeparator, decimalPseudoSeparators, pseudoMinuses, prefix, postfix, minusSign, }) {\r\n let isInitializationPhase = true;\r\n const cleanNumberMask = generateMaskExpression({\r\n decimalSeparator,\r\n decimalPseudoSeparators,\r\n pseudoMinuses,\r\n prefix: '',\r\n postfix: '',\r\n thousandSeparator: '',\r\n precision: Infinity,\r\n isNegativeAllowed: true,\r\n minusSign,\r\n });\r\n return ({ elementState, data }) => {\r\n if (!isInitializationPhase) {\r\n return { elementState, data };\r\n }\r\n isInitializationPhase = false;\r\n const { value, selection } = elementState;\r\n const [from, to] = selection;\r\n const { extractedPrefix, cleanValue, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const cleanState = maskitoTransform({\r\n selection: [\r\n Math.max(from - extractedPrefix.length, 0),\r\n clamp(to - extractedPrefix.length, 0, cleanValue.length),\r\n ],\r\n value: cleanValue,\r\n }, {\r\n mask: cleanNumberMask,\r\n });\r\n const [cleanFrom, cleanTo] = cleanState.selection;\r\n return {\r\n elementState: {\r\n selection: [\r\n cleanFrom + extractedPrefix.length,\r\n cleanTo + extractedPrefix.length,\r\n ],\r\n value: extractedPrefix + cleanState.value + extractedPostfix,\r\n },\r\n data,\r\n };\r\n };\r\n}\n\n/**\r\n * It removes repeated leading zeroes for integer part.\r\n * @example 0,|00005 => Backspace => |5\r\n * @example -0,|00005 => Backspace => -|5\r\n * @example User types \"000000\" => 0|\r\n * @example 0| => User types \"5\" => 5|\r\n */\r\nfunction createLeadingZeroesValidationPostprocessor({ decimalSeparator, thousandSeparator, prefix, postfix, }) {\r\n const trimLeadingZeroes = (value) => {\r\n const escapedThousandSeparator = escapeRegExp(thousandSeparator);\r\n return value\r\n .replace(\r\n // all leading zeroes followed by another zero\r\n new RegExp(`^(\\\\D+)?[0${escapedThousandSeparator}]+(?=0)`), '$1')\r\n .replace(\r\n // zero followed by not-zero digit\r\n new RegExp(`^(\\\\D+)?[0${escapedThousandSeparator}]+(?=[1-9])`), '$1');\r\n };\r\n const countTrimmedZeroesBefore = (value, index) => {\r\n const valueBefore = value.slice(0, index);\r\n const followedByZero = value.slice(index).startsWith('0');\r\n return (valueBefore.length -\r\n trimLeadingZeroes(valueBefore).length +\r\n (followedByZero ? 1 : 0));\r\n };\r\n return ({ value, selection }) => {\r\n const [from, to] = selection;\r\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const hasDecimalSeparator = cleanValue.includes(decimalSeparator);\r\n const [integerPart, decimalPart = ''] = cleanValue.split(decimalSeparator);\r\n const zeroTrimmedIntegerPart = trimLeadingZeroes(integerPart);\r\n if (integerPart === zeroTrimmedIntegerPart) {\r\n return { value, selection };\r\n }\r\n const newFrom = from - countTrimmedZeroesBefore(value, from);\r\n const newTo = to - countTrimmedZeroesBefore(value, to);\r\n return {\r\n value: extractedPrefix +\r\n zeroTrimmedIntegerPart +\r\n (hasDecimalSeparator ? decimalSeparator : '') +\r\n decimalPart +\r\n extractedPostfix,\r\n selection: [Math.max(newFrom, 0), Math.max(newTo, 0)],\r\n };\r\n };\r\n}\n\n/**\r\n * This postprocessor is connected with {@link createMinMaxPlugin}:\r\n * both validate `min`/`max` bounds of entered value (but at the different point of time).\r\n */\r\nfunction createMinMaxPostprocessor({ min, max, decimalSeparator, minusSign, }) {\r\n return ({ value, selection }) => {\r\n const parsedNumber = maskitoParseNumber(value, decimalSeparator);\r\n const limitedValue = \r\n /**\r\n * We cannot limit lower bound if user enters positive number.\r\n * The same for upper bound and negative number.\r\n * ___\r\n * @example (min = 5)\r\n * Empty input => Without this condition user cannot type 42 (the first digit will be rejected)\r\n * ___\r\n * @example (max = -10)\r\n * Value is -10 => Without this condition user cannot delete 0 to enter another digit\r\n */\r\n parsedNumber > 0 ? Math.min(parsedNumber, max) : Math.max(parsedNumber, min);\r\n if (parsedNumber && limitedValue !== parsedNumber) {\r\n const newValue = `${limitedValue}`\r\n .replace('.', decimalSeparator)\r\n .replace(CHAR_HYPHEN, minusSign);\r\n return {\r\n value: newValue,\r\n selection: [newValue.length, newValue.length],\r\n };\r\n }\r\n return {\r\n value,\r\n selection,\r\n };\r\n };\r\n}\n\n/**\r\n * Manage caret-navigation when user \"deletes\" non-removable digits or separators\r\n * @example 1,|42 => Backspace => 1|,42 (only if `decimalZeroPadding` is `true`)\r\n * @example 1|,42 => Delete => 1,|42 (only if `decimalZeroPadding` is `true`)\r\n * @example 0,|00 => Delete => 0,0|0 (only if `decimalZeroPadding` is `true`)\r\n * @example 1 |000 => Backspace => 1| 000 (always)\r\n */\r\nfunction createNonRemovableCharsDeletionPreprocessor({ decimalSeparator, thousandSeparator, decimalZeroPadding, }) {\r\n return ({ elementState, data }, actionType) => {\r\n const { value, selection } = elementState;\r\n const [from, to] = selection;\r\n const selectedCharacters = value.slice(from, to);\r\n const nonRemovableSeparators = decimalZeroPadding\r\n ? [decimalSeparator, thousandSeparator]\r\n : [thousandSeparator];\r\n const areNonRemovableZeroesSelected = decimalZeroPadding &&\r\n from > value.indexOf(decimalSeparator) &&\r\n Boolean(selectedCharacters.match(/^0+$/gi));\r\n if ((actionType !== 'deleteBackward' && actionType !== 'deleteForward') ||\r\n (!nonRemovableSeparators.includes(selectedCharacters) &&\r\n !areNonRemovableZeroesSelected)) {\r\n return {\r\n elementState,\r\n data,\r\n };\r\n }\r\n return {\r\n elementState: {\r\n value,\r\n selection: actionType === 'deleteForward' ? [to, to] : [from, from],\r\n },\r\n data,\r\n };\r\n };\r\n}\n\n/**\r\n * It pads integer part with zero if user types decimal separator (for empty input).\r\n * @example Empty input => User types \",\" (decimal separator) => 0,|\r\n */\r\nfunction createNotEmptyIntegerPartPreprocessor({ decimalSeparator, precision, prefix, postfix, }) {\r\n const startWithDecimalSepRegExp = new RegExp(`^\\\\D*${escapeRegExp(decimalSeparator)}`);\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const { cleanValue, extractedPrefix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const [from, to] = selection;\r\n const cleanFrom = clamp(from - extractedPrefix.length, 0, cleanValue.length);\r\n const cleanTo = clamp(to - extractedPrefix.length, 0, cleanValue.length);\r\n if (precision <= 0 ||\r\n cleanValue.slice(0, cleanFrom).includes(decimalSeparator) ||\r\n cleanValue.slice(cleanTo).includes(decimalSeparator) ||\r\n !data.match(startWithDecimalSepRegExp)) {\r\n return { elementState, data };\r\n }\r\n const digitsBeforeCursor = cleanValue.slice(0, cleanFrom).match(/\\d+/);\r\n return {\r\n elementState,\r\n data: digitsBeforeCursor ? data : `0${data}`,\r\n };\r\n };\r\n}\n\n/**\r\n * It replaces pseudo characters with valid one.\r\n * @example User types '.' (but separator is equal to comma) => dot is replaced with comma.\r\n * @example User types hyphen / en-dash / em-dash => it is replaced with minus.\r\n */\r\nfunction createPseudoCharactersPreprocessor({ validCharacter, pseudoCharacters, prefix, postfix, }) {\r\n const pseudoCharactersRegExp = new RegExp(`[${pseudoCharacters.join('')}]`, 'gi');\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const { cleanValue, extractedPostfix, extractedPrefix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n return {\r\n elementState: {\r\n selection,\r\n value: extractedPrefix +\r\n cleanValue.replace(pseudoCharactersRegExp, validCharacter) +\r\n extractedPostfix,\r\n },\r\n data: data.replace(pseudoCharactersRegExp, validCharacter),\r\n };\r\n };\r\n}\n\n/**\r\n * It rejects new typed decimal separator if it already exists in text field.\r\n * Behaviour is similar to native <input type=\"number\"> (Chrome).\r\n * @example 1|23,45 => Press comma (decimal separator) => 1|23,45 (do nothing).\r\n */\r\nfunction createRepeatedDecimalSeparatorPreprocessor({ decimalSeparator, prefix, postfix, }) {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const [from, to] = selection;\r\n const { cleanValue } = extractAffixes(value, { prefix, postfix });\r\n return {\r\n elementState,\r\n data: !cleanValue.includes(decimalSeparator) ||\r\n value.slice(from, to + 1).includes(decimalSeparator)\r\n ? data\r\n : data.replaceAll(new RegExp(escapeRegExp(decimalSeparator), 'gi'), ''),\r\n };\r\n };\r\n}\n\n/**\r\n * It adds symbol for separating thousands.\r\n * @example 1000000 => (thousandSeparator is equal to space) => 1 000 000.\r\n */\r\nfunction createThousandSeparatorPostprocessor({ thousandSeparator, decimalSeparator, prefix, postfix, }) {\r\n if (!thousandSeparator) {\r\n return identity;\r\n }\r\n const isAllSpaces = (...chars) => chars.every(x => /\\s/.test(x));\r\n return ({ value, selection }) => {\r\n const { cleanValue, extractedPostfix, extractedPrefix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const { minus, integerPart, decimalPart } = toNumberParts(cleanValue, {\r\n decimalSeparator,\r\n thousandSeparator,\r\n });\r\n const [initialFrom, initialTo] = selection;\r\n let [from, to] = selection;\r\n const processedIntegerPart = Array.from(integerPart).reduceRight((formattedValuePart, char, i) => {\r\n const isLeadingThousandSeparator = !i && char === thousandSeparator;\r\n const isPositionForSeparator = !isLeadingThousandSeparator &&\r\n formattedValuePart.length &&\r\n (formattedValuePart.length + 1) % 4 === 0;\r\n if (isPositionForSeparator &&\r\n (char === thousandSeparator || isAllSpaces(char, thousandSeparator))) {\r\n return thousandSeparator + formattedValuePart;\r\n }\r\n if (char === thousandSeparator && !isPositionForSeparator) {\r\n if (i && i <= initialFrom) {\r\n from--;\r\n }\r\n if (i && i <= initialTo) {\r\n to--;\r\n }\r\n return formattedValuePart;\r\n }\r\n if (!isPositionForSeparator) {\r\n return char + formattedValuePart;\r\n }\r\n if (i <= initialFrom) {\r\n from++;\r\n }\r\n if (i <= initialTo) {\r\n to++;\r\n }\r\n return char + thousandSeparator + formattedValuePart;\r\n }, '');\r\n return {\r\n value: extractedPrefix +\r\n minus +\r\n processedIntegerPart +\r\n (cleanValue.includes(decimalSeparator) ? decimalSeparator : '') +\r\n decimalPart +\r\n extractedPostfix,\r\n selection: [from, to],\r\n };\r\n };\r\n}\n\n/**\r\n * It drops decimal part if precision is zero.\r\n * @example User pastes '123.45' (but precision is zero) => 123\r\n */\r\nfunction createZeroPrecisionPreprocessor({ precision, decimalSeparator, prefix, postfix, }) {\r\n if (precision > 0) {\r\n return identity;\r\n }\r\n const decimalPartRegExp = new RegExp(`${escapeRegExp(decimalSeparator)}.*$`, 'g');\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const [from, to] = selection;\r\n const newValue = extractedPrefix +\r\n cleanValue.replace(decimalPartRegExp, '') +\r\n extractedPostfix;\r\n return {\r\n elementState: {\r\n selection: [\r\n Math.min(from, newValue.length),\r\n Math.min(to, newValue.length),\r\n ],\r\n value: newValue,\r\n },\r\n data: data.replace(decimalPartRegExp, ''),\r\n };\r\n };\r\n}\n\nconst DUMMY_SELECTION = [0, 0];\r\n/**\r\n * It removes repeated leading zeroes for integer part on blur-event.\r\n * @example 000000 => blur => 0\r\n * @example 00005 => blur => 5\r\n */\r\nfunction createLeadingZeroesValidationPlugin({ decimalSeparator, thousandSeparator, prefix, postfix, }) {\r\n const dropRepeatedLeadingZeroes = createLeadingZeroesValidationPostprocessor({\r\n decimalSeparator,\r\n thousandSeparator,\r\n prefix,\r\n postfix,\r\n });\r\n return maskitoEventHandler('blur', element => {\r\n const newValue = dropRepeatedLeadingZeroes({\r\n value: element.value,\r\n selection: DUMMY_SELECTION,\r\n }, { value: '', selection: DUMMY_SELECTION }).value;\r\n maskitoUpdateElement(element, newValue);\r\n }, { capture: true });\r\n}\n\n/**\r\n * This plugin is connected with {@link createMinMaxPostprocessor}:\r\n * both validate `min`/`max` bounds of entered value (but at the different point of time).\r\n */\r\nfunction createMinMaxPlugin({ min, max, decimalSeparator, }) {\r\n return maskitoEventHandler('blur', (element, options) => {\r\n const parsedNumber = maskitoParseNumber(element.value, decimalSeparator);\r\n const clampedNumber = clamp(parsedNumber, min, max);\r\n if (!Number.isNaN(parsedNumber) && parsedNumber !== clampedNumber) {\r\n maskitoUpdateElement(element, maskitoTransform(stringifyNumberWithoutExp(clampedNumber), options));\r\n }\r\n }, { capture: true });\r\n}\n\n/**\r\n * It pads EMPTY integer part with zero if decimal parts exists.\r\n * It works on blur event only!\r\n * @example 1|,23 => Backspace => Blur => 0,23\r\n */\r\nfunction createNotEmptyIntegerPlugin({ decimalSeparator, prefix, postfix, }) {\r\n return maskitoEventHandler('blur', element => {\r\n const { cleanValue, extractedPostfix, extractedPrefix } = extractAffixes(element.value, { prefix, postfix });\r\n const newValue = extractedPrefix +\r\n cleanValue.replace(new RegExp(`^(\\\\D+)?${escapeRegExp(decimalSeparator)}`), `$10${decimalSeparator}`) +\r\n extractedPostfix;\r\n maskitoUpdateElement(element, newValue);\r\n }, { capture: true });\r\n}\n\nfunction maskitoNumberOptionsGenerator({ max = Number.MAX_SAFE_INTEGER, min = Number.MIN_SAFE_INTEGER, precision = 0, thousandSeparator = CHAR_NO_BREAK_SPACE, decimalSeparator = '.', decimalPseudoSeparators, decimalZeroPadding = false, prefix: unsafePrefix = '', postfix = '', minusSign = CHAR_MINUS, } = {}) {\r\n const pseudoMinuses = [\r\n CHAR_HYPHEN,\r\n CHAR_EN_DASH,\r\n CHAR_EM_DASH,\r\n CHAR_JP_HYPHEN,\r\n CHAR_MINUS,\r\n ].filter(char => char !== thousandSeparator && char !== decimalSeparator && char !== minusSign);\r\n const validatedDecimalPseudoSeparators = validateDecimalPseudoSeparators({\r\n decimalSeparator,\r\n thousandSeparator,\r\n decimalPseudoSeparators,\r\n });\r\n const prefix = unsafePrefix.endsWith(decimalSeparator) && precision > 0\r\n ? `${unsafePrefix}${CHAR_ZERO_WIDTH_SPACE}`\r\n : unsafePrefix;\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: generateMaskExpression({\r\n decimalSeparator,\r\n precision,\r\n thousandSeparator,\r\n prefix,\r\n postfix,\r\n isNegativeAllowed: min < 0,\r\n minusSign,\r\n }), preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createInitializationOnlyPreprocessor({\r\n decimalSeparator,\r\n decimalPseudoSeparators: validatedDecimalPseudoSeparators,\r\n pseudoMinuses,\r\n prefix,\r\n postfix,\r\n minusSign,\r\n }),\r\n createAffixesFilterPreprocessor({ prefix, postfix }),\r\n createPseudoCharactersPreprocessor({\r\n validCharacter: minusSign,\r\n pseudoCharacters: pseudoMinuses,\r\n prefix,\r\n postfix,\r\n }),\r\n createPseudoCharactersPreprocessor({\r\n validCharacter: decimalSeparator,\r\n pseudoCharacters: validatedDecimalPseudoSeparators,\r\n prefix,\r\n postfix,\r\n }),\r\n createNotEmptyIntegerPartPreprocessor({\r\n decimalSeparator,\r\n precision,\r\n prefix,\r\n postfix,\r\n }),\r\n createNonRemovableCharsDeletionPreprocessor({\r\n decimalSeparator,\r\n decimalZeroPadding,\r\n thousandSeparator,\r\n }),\r\n createZeroPrecisionPreprocessor({\r\n precision,\r\n decimalSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n createRepeatedDecimalSeparatorPreprocessor({\r\n decimalSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n ], postprocessors: [\r\n createMinMaxPostprocessor({ decimalSeparator, min, max, minusSign }),\r\n maskitoPrefixPostprocessorGenerator(prefix),\r\n maskitoPostfixPostprocessorGenerator(postfix),\r\n createThousandSeparatorPostprocessor({\r\n decimalSeparator,\r\n thousandSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n createDecimalZeroPaddingPostprocessor({\r\n decimalSeparator,\r\n decimalZeroPadding,\r\n precision,\r\n prefix,\r\n postfix,\r\n }),\r\n emptyPostprocessor({ prefix, postfix, decimalSeparator, thousandSeparator }),\r\n ], plugins: [\r\n createLeadingZeroesValidationPlugin({\r\n decimalSeparator,\r\n thousandSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n createNotEmptyIntegerPlugin({\r\n decimalSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n createMinMaxPlugin({ min, max, decimalSeparator }),\r\n ], overwriteMode: decimalZeroPadding\r\n ? ({ value, selection: [from] }) => from <= value.indexOf(decimalSeparator) ? 'shift' : 'replace'\r\n : 'shift' });\r\n}\n\nfunction createMaxValidationPreprocessor(timeSegmentMaxValues, timeMode) {\r\n const paddedMaxValues = padTimeSegments(timeSegmentMaxValues);\r\n const invalidCharsRegExp = new RegExp(`[^\\\\d${TIME_FIXED_CHARACTERS.map(escapeRegExp).join('')}]+`);\r\n return ({ elementState, data }, actionType) => {\r\n if (actionType === 'deleteBackward' || actionType === 'deleteForward') {\r\n return { elementState, data };\r\n }\r\n const { value, selection } = elementState;\r\n if (actionType === 'validation') {\r\n const { validatedTimeString, updatedTimeSelection } = validateTimeString({\r\n timeString: value,\r\n paddedMaxValues,\r\n offset: 0,\r\n selection,\r\n timeMode,\r\n });\r\n return {\r\n elementState: {\r\n value: validatedTimeString,\r\n selection: updatedTimeSelection,\r\n },\r\n data,\r\n };\r\n }\r\n const newCharacters = data.replace(invalidCharsRegExp, '');\r\n const [from, rawTo] = selection;\r\n let to = rawTo + newCharacters.length; // to be conformed with `overwriteMode: replace`\r\n const newPossibleValue = value.slice(0, from) + newCharacters + value.slice(to);\r\n const { validatedTimeString, updatedTimeSelection } = validateTimeString({\r\n timeString: newPossibleValue,\r\n paddedMaxValues,\r\n offset: 0,\r\n selection: [from, to],\r\n timeMode,\r\n });\r\n if (newPossibleValue && !validatedTimeString) {\r\n return { elementState, data: '' }; // prevent changes\r\n }\r\n to = updatedTimeSelection[1];\r\n const newData = validatedTimeString.slice(from, to);\r\n return {\r\n elementState: {\r\n selection,\r\n value: validatedTimeString.slice(0, from) +\r\n '0'.repeat(newData.length) +\r\n validatedTimeString.slice(to),\r\n },\r\n data: newData,\r\n };\r\n };\r\n}\n\nfunction maskitoTimeOptionsGenerator({ mode, timeSegmentMaxValues = {}, step = 0, }) {\r\n const enrichedTimeSegmentMaxValues = Object.assign(Object.assign({}, DEFAULT_TIME_SEGMENT_MAX_VALUES), timeSegmentMaxValues);\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: Array.from(mode).map(char => TIME_FIXED_CHARACTERS.includes(char) ? char : /\\d/), preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createColonConvertPreprocessor(),\r\n createZeroPlaceholdersPreprocessor(),\r\n createMaxValidationPreprocessor(enrichedTimeSegmentMaxValues, mode),\r\n ], plugins: [\r\n createTimeSegmentsSteppingPlugin({\r\n fullMode: mode,\r\n step,\r\n timeSegmentMaxValues: enrichedTimeSegmentMaxValues,\r\n }),\r\n ], overwriteMode: 'replace' });\r\n}\n\nexport { maskitoAddOnFocusPlugin, maskitoCaretGuard, maskitoDateOptionsGenerator, maskitoDateRangeOptionsGenerator, maskitoDateTimeOptionsGenerator, maskitoEventHandler, maskitoNumberOptionsGenerator, maskitoParseNumber, maskitoPostfixPostprocessorGenerator, maskitoPrefixPostprocessorGenerator, maskitoRejectEvent, maskitoRemoveOnBlurPlugin, maskitoTimeOptionsGenerator, maskitoWithPlaceholder };\n","import { Maskito, MASKITO_DEFAULT_ELEMENT_PREDICATE } from '@maskito/core';\nimport { useLayoutEffect, useEffect, useState, useCallback, useRef } from 'react';\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nfunction isThenable(x) {\n return x && typeof x === 'object' && 'then' in x;\n}\n/**\r\n * Hook for convenient use of Maskito in React\r\n * @description For controlled inputs use `onInput` event\r\n * @param options options used for creating Maskito\r\n * @param elementPredicate function that can help find nested Input or TextArea\r\n * @returns ref callback to pass it in React Element\r\n * @example\r\n * // To avoid unnecessary hook runs with Maskito recreation pass named variables\r\n * // good example ✅\r\n * useMaskito({ options: maskitoOptions, elementPredicate: maskitoPredicate })\r\n *\r\n * // bad example ❌\r\n * useMaskito({ options: { mask: /^.*$/ }, elementPredicate: () => e.querySelector('input') })\r\n */\nconst useMaskito = ({\n options = null,\n elementPredicate = MASKITO_DEFAULT_ELEMENT_PREDICATE\n} = {}) => {\n const [hostElement, setHostElement] = useState(null);\n const [element, setElement] = useState(null);\n const onRefChange = useCallback(node => {\n setHostElement(node);\n }, []);\n const latestPredicateRef = useRef(elementPredicate);\n latestPredicateRef.current = elementPredicate;\n useIsomorphicLayoutEffect(() => {\n if (!hostElement) {\n return;\n }\n const predicate = elementPredicate;\n const elementOrPromise = predicate(hostElement);\n if (isThenable(elementOrPromise)) {\n void elementOrPromise.then(el => {\n if (latestPredicateRef.current === predicate) {\n setElement(el);\n }\n });\n } else {\n setElement(elementOrPromise);\n }\n }, [hostElement, elementPredicate, latestPredicateRef]);\n useIsomorphicLayoutEffect(() => {\n if (!element || !options) {\n return;\n }\n const maskedElement = new Maskito(element, options);\n return () => {\n maskedElement.destroy();\n };\n }, [options, element]);\n return onRefChange;\n};\n\nexport { useMaskito };\n"],"names":[],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
|
1
|
+
{"version":3,"file":"index.esm-BAUPit5Y.js","sources":["../../../node_modules/@maskito/core/index.esm.js","../../../node_modules/@maskito/kit/index.esm.js","../../../node_modules/@maskito/react/index.esm.js"],"sourcesContent":["function getContentEditableSelection(element) {\r\n const { anchorOffset = 0, focusOffset = 0 } = element.ownerDocument.getSelection() || {};\r\n const from = Math.min(anchorOffset, focusOffset);\r\n const to = Math.max(anchorOffset, focusOffset);\r\n return [from, to];\r\n}\n\nfunction setContentEditableSelection(element, [from, to]) {\r\n var _a, _b;\r\n const document = element.ownerDocument;\r\n const range = document.createRange();\r\n range.setStart(element.firstChild || element, Math.min(from, ((_a = element.textContent) === null || _a === void 0 ? void 0 : _a.length) || 0));\r\n range.setEnd(element.lastChild || element, Math.min(to, ((_b = element.textContent) === null || _b === void 0 ? void 0 : _b.length) || 0));\r\n const selection = document.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n}\n\nclass ContentEditableAdapter {\r\n constructor(element) {\r\n this.element = element;\r\n this.maxLength = Infinity;\r\n }\r\n get value() {\r\n return this.element.innerText.replace(/\\n\\n$/, '\\n');\r\n }\r\n set value(value) {\r\n // Setting into innerHTML of element with `white-space: pre;` style\r\n this.element.innerHTML = value.replace(/\\n$/, '\\n\\n');\r\n }\r\n get selectionStart() {\r\n return getContentEditableSelection(this.element)[0];\r\n }\r\n get selectionEnd() {\r\n return getContentEditableSelection(this.element)[1];\r\n }\r\n setSelectionRange(from, to) {\r\n setContentEditableSelection(this.element, [from || 0, to || 0]);\r\n }\r\n select() {\r\n this.setSelectionRange(0, this.value.length);\r\n }\r\n}\r\nfunction maskitoAdaptContentEditable(element) {\r\n const adapter = new ContentEditableAdapter(element);\r\n return new Proxy(element, {\r\n get(target, prop) {\r\n if (prop in adapter) {\r\n return adapter[prop];\r\n }\r\n const nativeProperty = target[prop];\r\n return typeof nativeProperty === 'function'\r\n ? nativeProperty.bind(target)\r\n : nativeProperty;\r\n },\r\n set(target, prop, val, receiver) {\r\n return Reflect.set(prop in adapter ? adapter : target, prop, val, receiver);\r\n },\r\n });\r\n}\n\nconst MASKITO_DEFAULT_ELEMENT_PREDICATE = e => e.isContentEditable\r\n ? maskitoAdaptContentEditable(e)\r\n : e.querySelector('input,textarea') ||\r\n e;\n\nconst MASKITO_DEFAULT_OPTIONS = {\r\n mask: /^.*$/,\r\n preprocessors: [],\r\n postprocessors: [],\r\n plugins: [],\r\n overwriteMode: 'shift',\r\n};\n\nclass MaskHistory {\r\n constructor() {\r\n this.now = null;\r\n this.past = [];\r\n this.future = [];\r\n }\r\n undo() {\r\n const state = this.past.pop();\r\n if (state && this.now) {\r\n this.future.push(this.now);\r\n this.updateElement(state, 'historyUndo');\r\n }\r\n }\r\n redo() {\r\n const state = this.future.pop();\r\n if (state && this.now) {\r\n this.past.push(this.now);\r\n this.updateElement(state, 'historyRedo');\r\n }\r\n }\r\n updateHistory(state) {\r\n if (!this.now) {\r\n this.now = state;\r\n return;\r\n }\r\n const isValueChanged = this.now.value !== state.value;\r\n const isSelectionChanged = this.now.selection.some((item, index) => item !== state.selection[index]);\r\n if (!isValueChanged && !isSelectionChanged) {\r\n return;\r\n }\r\n if (isValueChanged) {\r\n this.past.push(this.now);\r\n this.future = [];\r\n }\r\n this.now = state;\r\n }\r\n updateElement(state, inputType) {\r\n this.now = state;\r\n this.updateElementState(state, { inputType, data: null });\r\n }\r\n}\n\nfunction areElementValuesEqual(sampleState, ...states) {\r\n return states.every(({ value }) => value === sampleState.value);\r\n}\r\nfunction areElementStatesEqual(sampleState, ...states) {\r\n return states.every(({ value, selection }) => value === sampleState.value &&\r\n selection[0] === sampleState.selection[0] &&\r\n selection[1] === sampleState.selection[1]);\r\n}\n\nfunction applyOverwriteMode({ value, selection }, newCharacters, mode) {\r\n const [from, to] = selection;\r\n const computedMode = typeof mode === 'function' ? mode({ value, selection }) : mode;\r\n return {\r\n value,\r\n selection: computedMode === 'replace' ? [from, from + newCharacters.length] : [from, to],\r\n };\r\n}\n\nfunction isFixedCharacter(char) {\r\n return typeof char === 'string';\r\n}\n\nfunction getLeadingFixedCharacters(mask, validatedValuePart, newCharacter, initialElementState) {\r\n let leadingFixedCharacters = '';\r\n for (let i = validatedValuePart.length; i < mask.length; i++) {\r\n const charConstraint = mask[i];\r\n const isInitiallyExisted = (initialElementState === null || initialElementState === void 0 ? void 0 : initialElementState.value[i]) === charConstraint;\r\n if (!isFixedCharacter(charConstraint) ||\r\n (charConstraint === newCharacter && !isInitiallyExisted)) {\r\n return leadingFixedCharacters;\r\n }\r\n leadingFixedCharacters += charConstraint;\r\n }\r\n return leadingFixedCharacters;\r\n}\n\nfunction validateValueWithMask(value, maskExpression) {\r\n if (Array.isArray(maskExpression)) {\r\n return (value.length === maskExpression.length &&\r\n Array.from(value).every((char, i) => {\r\n const charConstraint = maskExpression[i];\r\n return isFixedCharacter(charConstraint)\r\n ? char === charConstraint\r\n : char.match(charConstraint);\r\n }));\r\n }\r\n return maskExpression.test(value);\r\n}\n\nfunction guessValidValueByPattern(elementState, mask, initialElementState) {\r\n let maskedFrom = null;\r\n let maskedTo = null;\r\n const maskedValue = Array.from(elementState.value).reduce((validatedCharacters, char, charIndex) => {\r\n const leadingCharacters = getLeadingFixedCharacters(mask, validatedCharacters, char, initialElementState);\r\n const newValidatedChars = validatedCharacters + leadingCharacters;\r\n const charConstraint = mask[newValidatedChars.length];\r\n if (isFixedCharacter(charConstraint)) {\r\n return newValidatedChars + charConstraint;\r\n }\r\n if (!char.match(charConstraint)) {\r\n return newValidatedChars;\r\n }\r\n if (maskedFrom === null && charIndex >= elementState.selection[0]) {\r\n maskedFrom = newValidatedChars.length;\r\n }\r\n if (maskedTo === null && charIndex >= elementState.selection[1]) {\r\n maskedTo = newValidatedChars.length;\r\n }\r\n return newValidatedChars + char;\r\n }, '');\r\n const trailingFixedCharacters = getLeadingFixedCharacters(mask, maskedValue, '', initialElementState);\r\n return {\r\n value: validateValueWithMask(maskedValue + trailingFixedCharacters, mask)\r\n ? maskedValue + trailingFixedCharacters\r\n : maskedValue,\r\n selection: [maskedFrom !== null && maskedFrom !== void 0 ? maskedFrom : maskedValue.length, maskedTo !== null && maskedTo !== void 0 ? maskedTo : maskedValue.length],\r\n };\r\n}\n\nfunction guessValidValueByRegExp({ value, selection }, maskRegExp) {\r\n const [from, to] = selection;\r\n let newFrom = from;\r\n let newTo = to;\r\n const validatedValue = Array.from(value).reduce((validatedValuePart, char, i) => {\r\n const newPossibleValue = validatedValuePart + char;\r\n if (from === i) {\r\n newFrom = validatedValuePart.length;\r\n }\r\n if (to === i) {\r\n newTo = validatedValuePart.length;\r\n }\r\n return newPossibleValue.match(maskRegExp) ? newPossibleValue : validatedValuePart;\r\n }, '');\r\n return { value: validatedValue, selection: [newFrom, newTo] };\r\n}\n\nfunction calibrateValueByMask(elementState, mask, initialElementState = null) {\r\n if (validateValueWithMask(elementState.value, mask)) {\r\n return elementState;\r\n }\r\n const { value, selection } = Array.isArray(mask)\r\n ? guessValidValueByPattern(elementState, mask, initialElementState)\r\n : guessValidValueByRegExp(elementState, mask);\r\n return {\r\n selection,\r\n value: Array.isArray(mask) ? value.slice(0, mask.length) : value,\r\n };\r\n}\n\nfunction removeFixedMaskCharacters(initialElementState, mask) {\r\n if (!Array.isArray(mask)) {\r\n return initialElementState;\r\n }\r\n const [from, to] = initialElementState.selection;\r\n const selection = [];\r\n const unmaskedValue = Array.from(initialElementState.value).reduce((rawValue, char, i) => {\r\n const charConstraint = mask[i];\r\n if (i === from) {\r\n selection.push(rawValue.length);\r\n }\r\n if (i === to) {\r\n selection.push(rawValue.length);\r\n }\r\n return isFixedCharacter(charConstraint) && charConstraint === char\r\n ? rawValue\r\n : rawValue + char;\r\n }, '');\r\n if (selection.length < 2) {\r\n selection.push(...new Array(2 - selection.length).fill(unmaskedValue.length));\r\n }\r\n return {\r\n value: unmaskedValue,\r\n selection: [selection[0], selection[1]],\r\n };\r\n}\n\nclass MaskModel {\r\n constructor(initialElementState, maskOptions) {\r\n this.initialElementState = initialElementState;\r\n this.maskOptions = maskOptions;\r\n this.value = '';\r\n this.selection = [0, 0];\r\n const { value, selection } = calibrateValueByMask(this.initialElementState, this.getMaskExpression(this.initialElementState));\r\n this.value = value;\r\n this.selection = selection;\r\n }\r\n addCharacters([from, to], newCharacters) {\r\n const { value } = this;\r\n const maskExpression = this.getMaskExpression({\r\n value: value.slice(0, from) + newCharacters + value.slice(to),\r\n selection: [from + newCharacters.length, from + newCharacters.length],\r\n });\r\n const initialElementState = { value, selection: [from, to] };\r\n const unmaskedElementState = removeFixedMaskCharacters(initialElementState, maskExpression);\r\n const [unmaskedFrom, unmaskedTo] = applyOverwriteMode(unmaskedElementState, newCharacters, this.maskOptions.overwriteMode).selection;\r\n const newUnmaskedLeadingValuePart = unmaskedElementState.value.slice(0, unmaskedFrom) + newCharacters;\r\n const newCaretIndex = newUnmaskedLeadingValuePart.length;\r\n const maskedElementState = calibrateValueByMask({\r\n value: newUnmaskedLeadingValuePart +\r\n unmaskedElementState.value.slice(unmaskedTo),\r\n selection: [newCaretIndex, newCaretIndex],\r\n }, maskExpression, initialElementState);\r\n const isInvalidCharsInsertion = \r\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\r\n value.slice(0, unmaskedFrom) ===\r\n calibrateValueByMask({\r\n value: newUnmaskedLeadingValuePart,\r\n selection: [newCaretIndex, newCaretIndex],\r\n }, maskExpression, initialElementState).value;\r\n if (isInvalidCharsInsertion ||\r\n areElementStatesEqual(this, maskedElementState) // If typing new characters does not change value\r\n ) {\r\n throw new Error('Invalid mask value');\r\n }\r\n this.value = maskedElementState.value;\r\n this.selection = maskedElementState.selection;\r\n }\r\n deleteCharacters([from, to]) {\r\n if (from === to || !to) {\r\n return;\r\n }\r\n const { value } = this;\r\n const maskExpression = this.getMaskExpression({\r\n value: value.slice(0, from) + value.slice(to),\r\n selection: [from, from],\r\n });\r\n const initialElementState = { value, selection: [from, to] };\r\n const unmaskedElementState = removeFixedMaskCharacters(initialElementState, maskExpression);\r\n const [unmaskedFrom, unmaskedTo] = unmaskedElementState.selection;\r\n const newUnmaskedValue = unmaskedElementState.value.slice(0, unmaskedFrom) +\r\n unmaskedElementState.value.slice(unmaskedTo);\r\n const maskedElementState = calibrateValueByMask({ value: newUnmaskedValue, selection: [unmaskedFrom, unmaskedFrom] }, maskExpression, initialElementState);\r\n this.value = maskedElementState.value;\r\n this.selection = maskedElementState.selection;\r\n }\r\n getMaskExpression(elementState) {\r\n const { mask } = this.maskOptions;\r\n return typeof mask === 'function' ? mask(elementState) : mask;\r\n }\r\n}\n\nclass EventListener {\r\n constructor(element) {\r\n this.element = element;\r\n this.listeners = [];\r\n }\r\n listen(eventType, fn, options) {\r\n const untypedFn = fn;\r\n this.element.addEventListener(eventType, untypedFn, options);\r\n this.listeners.push(() => this.element.removeEventListener(eventType, untypedFn));\r\n }\r\n destroy() {\r\n this.listeners.forEach(stopListen => stopListen());\r\n }\r\n}\n\nconst HotkeyModifier = {\r\n CTRL: 1 << 0,\r\n ALT: 1 << 1,\r\n SHIFT: 1 << 2,\r\n META: 1 << 3,\r\n};\r\n// TODO add variants that can be processed correctly\r\nconst HotkeyCode = {\r\n Y: 89,\r\n Z: 90,\r\n};\r\n/**\r\n * Checks if the passed keyboard event match the required hotkey.\r\n *\r\n * @example\r\n * input.addEventListener('keydown', (event) => {\r\n * if (isHotkey(event, HotkeyModifier.CTRL | HotkeyModifier.SHIFT, HotkeyCode.Z)) {\r\n * // redo hotkey pressed\r\n * }\r\n * })\r\n *\r\n * @return will return `true` only if the {@link HotkeyCode} matches and only the necessary\r\n * {@link HotkeyModifier modifiers} have been pressed\r\n */\r\nfunction isHotkey(event, modifiers, hotkeyCode) {\r\n return (event.ctrlKey === !!(modifiers & HotkeyModifier.CTRL) &&\r\n event.altKey === !!(modifiers & HotkeyModifier.ALT) &&\r\n event.shiftKey === !!(modifiers & HotkeyModifier.SHIFT) &&\r\n event.metaKey === !!(modifiers & HotkeyModifier.META) &&\r\n /**\r\n * We intentionally use legacy {@link KeyboardEvent#keyCode `keyCode`} property. It is more\r\n * \"keyboard-layout\"-independent than {@link KeyboardEvent#key `key`} or {@link KeyboardEvent#code `code`} properties.\r\n * @see {@link https://github.com/taiga-family/maskito/issues/315 `KeyboardEvent#code` issue}\r\n */\r\n event.keyCode === hotkeyCode);\r\n}\n\nfunction isRedo(event) {\r\n return (isHotkey(event, HotkeyModifier.CTRL, HotkeyCode.Y) || // Windows\r\n isHotkey(event, HotkeyModifier.CTRL | HotkeyModifier.SHIFT, HotkeyCode.Z) || // Windows & Android\r\n isHotkey(event, HotkeyModifier.META | HotkeyModifier.SHIFT, HotkeyCode.Z) // macOS & iOS\r\n );\r\n}\r\nfunction isUndo(event) {\r\n return (isHotkey(event, HotkeyModifier.CTRL, HotkeyCode.Z) || // Windows & Android\r\n isHotkey(event, HotkeyModifier.META, HotkeyCode.Z) // macOS & iOS\r\n );\r\n}\n\n/**\r\n * Sets value to element, and dispatches input event\r\n * if you passed ELementState, it also sets selection range\r\n *\r\n * @example\r\n * maskitoUpdateElement(input, newValue);\r\n * maskitoUpdateElement(input, elementState);\r\n *\r\n * @see {@link https://github.com/taiga-family/maskito/issues/804 issue}\r\n *\r\n * @return void\r\n */\r\nfunction maskitoUpdateElement(element, valueOrElementState) {\r\n var _a;\r\n const initialValue = element.value;\r\n if (typeof valueOrElementState === 'string') {\r\n element.value = valueOrElementState;\r\n }\r\n else {\r\n const [from, to] = valueOrElementState.selection;\r\n element.value = valueOrElementState.value;\r\n if (element.matches(':focus')) {\r\n (_a = element.setSelectionRange) === null || _a === void 0 ? void 0 : _a.call(element, from, to);\r\n }\r\n }\r\n if (element.value !== initialValue) {\r\n element.dispatchEvent(new Event('input', \r\n /**\r\n * React handles this event only on bubbling phase\r\n *\r\n * here is the list of events that are processed in the capture stage, others are processed in the bubbling stage\r\n * https://github.com/facebook/react/blob/cb2439624f43c510007f65aea5c50a8bb97917e4/packages/react-dom-bindings/src/events/DOMPluginEventSystem.js#L222\r\n */\r\n { bubbles: true }));\r\n }\r\n}\n\nfunction getLineSelection({ value, selection }, isForward) {\r\n const [from, to] = selection;\r\n if (from !== to) {\r\n return [from, to];\r\n }\r\n const nearestBreak = isForward\r\n ? value.slice(from).indexOf('\\n') + 1 || value.length\r\n : value.slice(0, to).lastIndexOf('\\n') + 1;\r\n const selectFrom = isForward ? from : nearestBreak;\r\n const selectTo = isForward ? nearestBreak : to;\r\n return [selectFrom, selectTo];\r\n}\n\nfunction getNotEmptySelection({ value, selection }, isForward) {\r\n const [from, to] = selection;\r\n if (from !== to) {\r\n return [from, to];\r\n }\r\n const notEmptySelection = isForward ? [from, to + 1] : [from - 1, to];\r\n return notEmptySelection.map(x => Math.min(Math.max(x, 0), value.length));\r\n}\n\nconst TRAILING_SPACES_REG = /\\s+$/g;\r\nconst LEADING_SPACES_REG = /^\\s+/g;\r\nconst SPACE_REG = /\\s/;\r\nfunction getWordSelection({ value, selection }, isForward) {\r\n const [from, to] = selection;\r\n if (from !== to) {\r\n return [from, to];\r\n }\r\n if (isForward) {\r\n const valueAfterSelectionStart = value.slice(from);\r\n const [leadingSpaces] = valueAfterSelectionStart.match(LEADING_SPACES_REG) || [\r\n '',\r\n ];\r\n const nearestWordEndIndex = valueAfterSelectionStart\r\n .trimStart()\r\n .search(SPACE_REG);\r\n return [\r\n from,\r\n nearestWordEndIndex !== -1\r\n ? from + leadingSpaces.length + nearestWordEndIndex\r\n : value.length,\r\n ];\r\n }\r\n const valueBeforeSelectionEnd = value.slice(0, to);\r\n const [trailingSpaces] = valueBeforeSelectionEnd.match(TRAILING_SPACES_REG) || [''];\r\n const selectedWordLength = valueBeforeSelectionEnd\r\n .trimEnd()\r\n .split('')\r\n .reverse()\r\n .findIndex(char => char.match(SPACE_REG));\r\n return [\r\n selectedWordLength !== -1 ? to - trailingSpaces.length - selectedWordLength : 0,\r\n to,\r\n ];\r\n}\n\n/* eslint-disable @typescript-eslint/ban-types */\r\n/**\r\n * @internal\r\n */\r\nfunction maskitoPipe(processors = []) {\r\n return (initialData, ...readonlyArgs) => processors.reduce((data, fn) => (Object.assign(Object.assign({}, data), fn(data, ...readonlyArgs))), initialData);\r\n}\n\nfunction maskitoTransform(valueOrState, maskitoOptions) {\r\n const options = Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), maskitoOptions);\r\n const preprocessor = maskitoPipe(options.preprocessors);\r\n const postprocessor = maskitoPipe(options.postprocessors);\r\n const initialElementState = typeof valueOrState === 'string'\r\n ? { value: valueOrState, selection: [0, 0] }\r\n : valueOrState;\r\n const { elementState } = preprocessor({ elementState: initialElementState, data: '' }, 'validation');\r\n const maskModel = new MaskModel(elementState, options);\r\n const { value, selection } = postprocessor(maskModel, initialElementState);\r\n return typeof valueOrState === 'string' ? value : { value, selection };\r\n}\n\nfunction maskitoInitialCalibrationPlugin(customOptions) {\r\n return (element, options) => {\r\n const from = element.selectionStart || 0;\r\n const to = element.selectionEnd || 0;\r\n maskitoUpdateElement(element, {\r\n value: maskitoTransform(element.value, customOptions || options),\r\n selection: [from, to],\r\n });\r\n };\r\n}\n\nfunction maskitoStrictCompositionPlugin() {\r\n return (element, maskitoOptions) => {\r\n const listener = (event) => {\r\n if (event.inputType !== 'insertCompositionText') {\r\n return;\r\n }\r\n const selection = [\r\n element.selectionStart || 0,\r\n element.selectionEnd || 0,\r\n ];\r\n const elementState = {\r\n selection,\r\n value: element.value,\r\n };\r\n const validatedState = maskitoTransform(elementState, maskitoOptions);\r\n if (!areElementStatesEqual(elementState, validatedState)) {\r\n event.preventDefault();\r\n maskitoUpdateElement(element, validatedState);\r\n }\r\n };\r\n element.addEventListener('input', listener);\r\n return () => element.removeEventListener('input', listener);\r\n };\r\n}\n\nclass Maskito extends MaskHistory {\r\n constructor(element, maskitoOptions) {\r\n super();\r\n this.element = element;\r\n this.maskitoOptions = maskitoOptions;\r\n this.isTextArea = this.element.nodeName === 'TEXTAREA';\r\n this.eventListener = new EventListener(this.element);\r\n this.options = Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), this.maskitoOptions);\r\n this.preprocessor = maskitoPipe(this.options.preprocessors);\r\n this.postprocessor = maskitoPipe(this.options.postprocessors);\r\n this.teardowns = this.options.plugins.map(plugin => plugin(this.element, this.options));\r\n this.updateHistory(this.elementState);\r\n this.eventListener.listen('keydown', event => {\r\n if (isRedo(event)) {\r\n event.preventDefault();\r\n return this.redo();\r\n }\r\n if (isUndo(event)) {\r\n event.preventDefault();\r\n return this.undo();\r\n }\r\n });\r\n this.eventListener.listen('beforeinput', event => {\r\n var _a;\r\n const isForward = event.inputType.includes('Forward');\r\n this.updateHistory(this.elementState);\r\n switch (event.inputType) {\r\n // historyUndo/historyRedo will not be triggered if value was modified programmatically\r\n case 'historyUndo':\r\n event.preventDefault();\r\n return this.undo();\r\n case 'historyRedo':\r\n event.preventDefault();\r\n return this.redo();\r\n case 'deleteByCut':\r\n case 'deleteContentBackward':\r\n case 'deleteContentForward':\r\n return this.handleDelete({\r\n event,\r\n isForward,\r\n selection: getNotEmptySelection(this.elementState, isForward),\r\n });\r\n case 'deleteWordForward':\r\n case 'deleteWordBackward':\r\n return this.handleDelete({\r\n event,\r\n isForward,\r\n selection: getWordSelection(this.elementState, isForward),\r\n force: true,\r\n });\r\n case 'deleteSoftLineBackward':\r\n case 'deleteSoftLineForward':\r\n case 'deleteHardLineBackward':\r\n case 'deleteHardLineForward':\r\n return this.handleDelete({\r\n event,\r\n isForward,\r\n selection: getLineSelection(this.elementState, isForward),\r\n force: true,\r\n });\r\n case 'insertCompositionText':\r\n return; // will be handled inside `compositionend` event\r\n case 'insertLineBreak':\r\n case 'insertParagraph':\r\n return this.handleEnter(event);\r\n case 'insertFromPaste':\r\n case 'insertText':\r\n case 'insertFromDrop':\r\n default:\r\n return this.handleInsert(event, event.data ||\r\n (\r\n // `event.data` for `contentEditable` is always `null` for paste/drop events\r\n (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData('text/plain')) ||\r\n '');\r\n }\r\n });\r\n this.eventListener.listen('input', ({ inputType }) => {\r\n if (inputType === 'insertCompositionText') {\r\n return; // will be handled inside `compositionend` event\r\n }\r\n this.ensureValueFitsMask();\r\n this.updateHistory(this.elementState);\r\n });\r\n this.eventListener.listen('compositionend', () => {\r\n this.ensureValueFitsMask();\r\n this.updateHistory(this.elementState);\r\n });\r\n }\r\n get elementState() {\r\n const { value, selectionStart, selectionEnd } = this.element;\r\n return {\r\n value,\r\n selection: [selectionStart || 0, selectionEnd || 0],\r\n };\r\n }\r\n get maxLength() {\r\n const { maxLength } = this.element;\r\n return maxLength === -1 ? Infinity : maxLength;\r\n }\r\n destroy() {\r\n this.eventListener.destroy();\r\n this.teardowns.forEach(teardown => teardown === null || teardown === void 0 ? void 0 : teardown());\r\n }\r\n updateElementState({ value, selection }, eventInit = {\r\n inputType: 'insertText',\r\n data: null,\r\n }) {\r\n const initialValue = this.elementState.value;\r\n this.updateValue(value);\r\n this.updateSelectionRange(selection);\r\n if (initialValue !== value) {\r\n this.dispatchInputEvent(eventInit);\r\n }\r\n }\r\n updateSelectionRange([from, to]) {\r\n var _a;\r\n const { element } = this;\r\n if (element.matches(':focus') &&\r\n (element.selectionStart !== from || element.selectionEnd !== to)) {\r\n (_a = element.setSelectionRange) === null || _a === void 0 ? void 0 : _a.call(element, from, to);\r\n }\r\n }\r\n updateValue(value) {\r\n this.element.value = value;\r\n }\r\n ensureValueFitsMask() {\r\n this.updateElementState(maskitoTransform(this.elementState, this.options));\r\n }\r\n dispatchInputEvent(eventInit = {\r\n inputType: 'insertText',\r\n data: null,\r\n }) {\r\n if (globalThis.InputEvent) {\r\n this.element.dispatchEvent(new InputEvent('input', Object.assign(Object.assign({}, eventInit), { bubbles: true, cancelable: false })));\r\n }\r\n }\r\n handleDelete({ event, selection, isForward, force = false, }) {\r\n const initialState = {\r\n value: this.elementState.value,\r\n selection,\r\n };\r\n const [initialFrom, initialTo] = initialState.selection;\r\n const { elementState } = this.preprocessor({\r\n elementState: initialState,\r\n data: '',\r\n }, isForward ? 'deleteForward' : 'deleteBackward');\r\n const maskModel = new MaskModel(elementState, this.options);\r\n const [from, to] = elementState.selection;\r\n maskModel.deleteCharacters([from, to]);\r\n const newElementState = this.postprocessor(maskModel, initialState);\r\n const newPossibleValue = initialState.value.slice(0, initialFrom) +\r\n initialState.value.slice(initialTo);\r\n if (newPossibleValue === newElementState.value &&\r\n !force &&\r\n !this.element.isContentEditable) {\r\n return;\r\n }\r\n event.preventDefault();\r\n if (areElementValuesEqual(initialState, elementState, maskModel, newElementState)) {\r\n // User presses Backspace/Delete for the fixed value\r\n return this.updateSelectionRange(isForward ? [to, to] : [from, from]);\r\n }\r\n this.updateElementState(newElementState, {\r\n inputType: event.inputType,\r\n data: null,\r\n });\r\n this.updateHistory(newElementState);\r\n }\r\n handleInsert(event, data) {\r\n const initialElementState = this.elementState;\r\n const { elementState, data: insertedText = data } = this.preprocessor({\r\n data,\r\n elementState: initialElementState,\r\n }, 'insert');\r\n const maskModel = new MaskModel(elementState, this.options);\r\n try {\r\n maskModel.addCharacters(elementState.selection, insertedText);\r\n }\r\n catch (_a) {\r\n return event.preventDefault();\r\n }\r\n const [from, to] = elementState.selection;\r\n const newPossibleValue = initialElementState.value.slice(0, from) +\r\n data +\r\n initialElementState.value.slice(to);\r\n const newElementState = this.postprocessor(maskModel, initialElementState);\r\n if (newElementState.value.length > this.maxLength) {\r\n return event.preventDefault();\r\n }\r\n if (newPossibleValue !== newElementState.value ||\r\n this.element.isContentEditable) {\r\n event.preventDefault();\r\n this.updateElementState(newElementState, {\r\n data,\r\n inputType: event.inputType,\r\n });\r\n this.updateHistory(newElementState);\r\n }\r\n }\r\n handleEnter(event) {\r\n if (this.isTextArea || this.element.isContentEditable) {\r\n this.handleInsert(event, '\\n');\r\n }\r\n }\r\n}\n\nexport { MASKITO_DEFAULT_ELEMENT_PREDICATE, MASKITO_DEFAULT_OPTIONS, Maskito, maskitoAdaptContentEditable, maskitoInitialCalibrationPlugin, maskitoPipe, maskitoStrictCompositionPlugin, maskitoTransform, maskitoUpdateElement };\n","import { maskitoUpdateElement, MASKITO_DEFAULT_OPTIONS, maskitoTransform } from '@maskito/core';\n\n/**\r\n * Clamps a value between two inclusive limits\r\n *\r\n * @param value\r\n * @param min lower limit\r\n * @param max upper limit\r\n */\r\nfunction clamp(value, min, max) {\r\n const clampedValue = Math.min(Number(max), Math.max(Number(min), Number(value)));\r\n return (value instanceof Date ? new Date(clampedValue) : clampedValue);\r\n}\n\nfunction countDigits(str) {\r\n return str.replaceAll(/\\W/g, '').length;\r\n}\n\nfunction appendDate(initialDate, { day, month, year } = {}) {\r\n const date = new Date(initialDate);\r\n if (day) {\r\n date.setDate(date.getDate() + day);\r\n }\r\n if (month) {\r\n date.setMonth(date.getMonth() + month);\r\n }\r\n if (year) {\r\n date.setFullYear(date.getFullYear() + year);\r\n }\r\n return date;\r\n}\n\nconst getDateSegmentValueLength = (dateString) => {\r\n var _a, _b, _c;\r\n return ({\r\n day: ((_a = dateString.match(/d/g)) === null || _a === void 0 ? void 0 : _a.length) || 0,\r\n month: ((_b = dateString.match(/m/g)) === null || _b === void 0 ? void 0 : _b.length) || 0,\r\n year: ((_c = dateString.match(/y/g)) === null || _c === void 0 ? void 0 : _c.length) || 0,\r\n });\r\n};\n\nfunction dateToSegments(date) {\r\n return {\r\n day: String(date.getDate()).padStart(2, '0'),\r\n month: String(date.getMonth() + 1).padStart(2, '0'),\r\n year: String(date.getFullYear()).padStart(4, '0'),\r\n hours: String(date.getHours()).padStart(2, '0'),\r\n minutes: String(date.getMinutes()).padStart(2, '0'),\r\n seconds: String(date.getSeconds()).padStart(2, '0'),\r\n milliseconds: String(date.getMilliseconds()).padStart(3, '0'),\r\n };\r\n}\n\nfunction getFirstCompleteDate(dateString, dateModeTemplate) {\r\n const digitsInDate = countDigits(dateModeTemplate);\r\n const [completeDate = ''] = dateString.match(new RegExp(`(\\\\D*\\\\d){${digitsInDate}}`)) || [];\r\n return completeDate;\r\n}\n\nfunction isDateStringComplete(dateString, dateModeTemplate) {\r\n if (dateString.length < dateModeTemplate.length) {\r\n return false;\r\n }\r\n return dateString.split(/\\D/).every(segment => !segment.match(/^0+$/));\r\n}\n\nfunction parseDateRangeString(dateRange, dateModeTemplate, rangeSeparator) {\r\n const digitsInDate = countDigits(dateModeTemplate);\r\n return (dateRange\r\n .replace(rangeSeparator, '')\r\n .match(new RegExp(`(\\\\D*\\\\d[^\\\\d\\\\s]*){1,${digitsInDate}}`, 'g')) || []);\r\n}\n\nfunction parseDateString(dateString, fullMode) {\r\n const cleanMode = fullMode.replaceAll(/[^dmy]/g, '');\r\n const onlyDigitsDate = dateString.replaceAll(/\\D+/g, '');\r\n const dateSegments = {\r\n day: onlyDigitsDate.slice(cleanMode.indexOf('d'), cleanMode.lastIndexOf('d') + 1),\r\n month: onlyDigitsDate.slice(cleanMode.indexOf('m'), cleanMode.lastIndexOf('m') + 1),\r\n year: onlyDigitsDate.slice(cleanMode.indexOf('y'), cleanMode.lastIndexOf('y') + 1),\r\n };\r\n return Object.fromEntries(Object.entries(dateSegments)\r\n .filter(([_, value]) => Boolean(value))\r\n .sort(([a], [b]) => fullMode.toLowerCase().indexOf(a[0]) >\r\n fullMode.toLowerCase().indexOf(b[0])\r\n ? 1\r\n : -1));\r\n}\n\nfunction segmentsToDate(parsedDate, parsedTime) {\r\n var _a, _b, _c, _d, _e, _f, _g;\r\n const year = ((_a = parsedDate.year) === null || _a === void 0 ? void 0 : _a.length) === 2 ? `20${parsedDate.year}` : parsedDate.year;\r\n const date = new Date(Number(year !== null && year !== void 0 ? year : '0'), Number((_b = parsedDate.month) !== null && _b !== void 0 ? _b : '1') - 1, Number((_c = parsedDate.day) !== null && _c !== void 0 ? _c : '1'), Number((_d = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.hours) !== null && _d !== void 0 ? _d : '0'), Number((_e = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.minutes) !== null && _e !== void 0 ? _e : '0'), Number((_f = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.seconds) !== null && _f !== void 0 ? _f : '0'), Number((_g = parsedTime === null || parsedTime === void 0 ? void 0 : parsedTime.milliseconds) !== null && _g !== void 0 ? _g : '0'));\r\n // needed for years less than 1900\r\n date.setFullYear(Number(year !== null && year !== void 0 ? year : '0'));\r\n return date;\r\n}\n\nconst DATE_TIME_SEPARATOR = ', ';\n\nfunction toDateString({ day, month, year, hours, minutes, seconds, milliseconds, }, { dateMode, dateTimeSeparator = DATE_TIME_SEPARATOR, timeMode, }) {\r\n var _a;\r\n const safeYear = ((_a = dateMode.match(/y/g)) === null || _a === void 0 ? void 0 : _a.length) === 2 ? year === null || year === void 0 ? void 0 : year.slice(-2) : year;\r\n const fullMode = dateMode + (timeMode ? dateTimeSeparator + timeMode : '');\r\n return fullMode\r\n .replaceAll(/d+/g, day !== null && day !== void 0 ? day : '')\r\n .replaceAll(/m+/g, month !== null && month !== void 0 ? month : '')\r\n .replaceAll(/y+/g, safeYear !== null && safeYear !== void 0 ? safeYear : '')\r\n .replaceAll(/H+/g, hours !== null && hours !== void 0 ? hours : '')\r\n .replaceAll('MSS', milliseconds !== null && milliseconds !== void 0 ? milliseconds : '')\r\n .replaceAll(/M+/g, minutes !== null && minutes !== void 0 ? minutes : '')\r\n .replaceAll(/S+/g, seconds !== null && seconds !== void 0 ? seconds : '')\r\n .replaceAll(/^\\D+/g, '')\r\n .replaceAll(/\\D+$/g, '');\r\n}\n\nconst DATE_SEGMENTS_MAX_VALUES = {\r\n day: 31,\r\n month: 12,\r\n year: 9999,\r\n};\n\nconst DEFAULT_DECIMAL_PSEUDO_SEPARATORS = ['.', ',', 'б', 'ю'];\n\nconst DEFAULT_MIN_DATE = new Date('0001-01-01');\r\nconst DEFAULT_MAX_DATE = new Date('9999-12-31');\n\nconst DEFAULT_TIME_SEGMENT_MAX_VALUES = {\r\n hours: 23,\r\n minutes: 59,\r\n seconds: 59,\r\n milliseconds: 999,\r\n};\n\nconst TIME_FIXED_CHARACTERS = [':', '.'];\n\nconst TIME_SEGMENT_VALUE_LENGTHS = {\r\n hours: 2,\r\n minutes: 2,\r\n seconds: 2,\r\n milliseconds: 3,\r\n};\n\n/**\r\n * {@link https://unicode-table.com/en/00A0/ Non-breaking space}.\r\n */\r\nconst CHAR_NO_BREAK_SPACE = '\\u00A0';\r\n/**\r\n * {@link https://symbl.cc/en/200B/ Zero width space}.\r\n */\r\nconst CHAR_ZERO_WIDTH_SPACE = '\\u200B';\r\n/**\r\n * {@link https://unicode-table.com/en/2013/ EN dash}\r\n * is used to indicate a range of numbers or a span of time.\r\n * @example 2006–2022\r\n */\r\nconst CHAR_EN_DASH = '\\u2013';\r\n/**\r\n * {@link https://unicode-table.com/en/2014/ EM dash}\r\n * is used to mark a break in a sentence.\r\n * @example Taiga UI — powerful set of open source components for Angular\r\n * ___\r\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_HYPHEN}!\r\n */\r\nconst CHAR_EM_DASH = '\\u2014';\r\n/**\r\n * {@link https://unicode-table.com/en/002D/ Hyphen (minus sign)}\r\n * is used to combine words.\r\n * @example well-behaved\r\n * ___\r\n * Don't confuse with {@link CHAR_EN_DASH} or {@link CHAR_EM_DASH}!\r\n */\r\nconst CHAR_HYPHEN = '\\u002D';\r\n/**\r\n * {@link https://unicode-table.com/en/2212/ Minus}\r\n * is used as math operator symbol or before negative digits.\r\n * ---\r\n * Can be used as `−`. Don't confuse with {@link CHAR_HYPHEN}\r\n */\r\nconst CHAR_MINUS = '\\u2212';\r\n/**\r\n * {@link https://symbl.cc/en/30FC/ Katakana-Hiragana Prolonged Sound Mark}\r\n * is used as prolonged sounds in Japanese.\r\n */\r\nconst CHAR_JP_HYPHEN = '\\u30FC';\r\n/**\r\n * {@link https://symbl.cc/en/003A/ Colon}\r\n * is a punctuation mark that connects parts of a text logically.\r\n * ---\r\n * is also used as separator in time.\r\n */\r\nconst CHAR_COLON = '\\u003A';\r\n/**\r\n * {@link https://symbl.cc/en/FF1A/ Full-width colon}\r\n * is a full-width punctuation mark used to separate parts of a text commonly in Japanese.\r\n */\r\nconst CHAR_JP_COLON = '\\uFF1A';\n\nfunction validateDateString({ dateString, dateModeTemplate, offset, selection: [from, to], }) {\r\n const parsedDate = parseDateString(dateString, dateModeTemplate);\r\n const dateSegments = Object.entries(parsedDate);\r\n const validatedDateSegments = {};\r\n for (const [segmentName, segmentValue] of dateSegments) {\r\n const validatedDate = toDateString(validatedDateSegments, {\r\n dateMode: dateModeTemplate,\r\n });\r\n const maxSegmentValue = DATE_SEGMENTS_MAX_VALUES[segmentName];\r\n const fantomSeparator = validatedDate.length && 1;\r\n const lastSegmentDigitIndex = offset +\r\n validatedDate.length +\r\n fantomSeparator +\r\n getDateSegmentValueLength(dateModeTemplate)[segmentName];\r\n const isLastSegmentDigitAdded = lastSegmentDigitIndex >= from && lastSegmentDigitIndex === to;\r\n if (isLastSegmentDigitAdded && Number(segmentValue) > Number(maxSegmentValue)) {\r\n // 3|1.10.2010 => Type 9 => 3|1.10.2010\r\n return { validatedDateString: '', updatedSelection: [from, to] }; // prevent changes\r\n }\r\n if (isLastSegmentDigitAdded && Number(segmentValue) < 1) {\r\n // 31.0|1.2010 => Type 0 => 31.0|1.2010\r\n return { validatedDateString: '', updatedSelection: [from, to] }; // prevent changes\r\n }\r\n validatedDateSegments[segmentName] = segmentValue;\r\n }\r\n const validatedDateString = toDateString(validatedDateSegments, {\r\n dateMode: dateModeTemplate,\r\n });\r\n const addedDateSegmentSeparators = validatedDateString.length - dateString.length;\r\n return {\r\n validatedDateString,\r\n updatedSelection: [\r\n from + addedDateSegmentSeparators,\r\n to + addedDateSegmentSeparators,\r\n ],\r\n };\r\n}\n\n/**\r\n * Copy-pasted solution from lodash\r\n * @see https://lodash.com/docs/4.17.15#escapeRegExp\r\n */\r\nconst reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\r\nconst reHasRegExpChar = new RegExp(reRegExpChar.source);\r\nfunction escapeRegExp(str) {\r\n return str && reHasRegExpChar.test(str) ? str.replaceAll(reRegExpChar, '\\\\$&') : str;\r\n}\n\nfunction extractAffixes(value, { prefix, postfix }) {\r\n var _a, _b;\r\n const prefixRegExp = new RegExp(`^${escapeRegExp(prefix)}`);\r\n const postfixRegExp = new RegExp(`${escapeRegExp(postfix)}$`);\r\n const [extractedPrefix = ''] = (_a = value.match(prefixRegExp)) !== null && _a !== void 0 ? _a : [];\r\n const [extractedPostfix = ''] = (_b = value.match(postfixRegExp)) !== null && _b !== void 0 ? _b : [];\r\n const cleanValue = value.replace(prefixRegExp, '').replace(postfixRegExp, '');\r\n return { extractedPrefix, extractedPostfix, cleanValue };\r\n}\n\nfunction findCommonBeginningSubstr(a, b) {\r\n let res = '';\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i] !== b[i]) {\r\n return res;\r\n }\r\n res += a[i];\r\n }\r\n return res;\r\n}\n\nfunction identity(x) {\r\n return x;\r\n}\n\nfunction isEmpty(entity) {\r\n return !entity || (typeof entity === 'object' && Object.keys(entity).length === 0);\r\n}\n\nfunction padWithZeroesUntilValid(segmentValue, paddedMaxValue, prefixedZeroesCount = 0) {\r\n if (Number(segmentValue.padEnd(paddedMaxValue.length, '0')) <= Number(paddedMaxValue)) {\r\n return { validatedSegmentValue: segmentValue, prefixedZeroesCount };\r\n }\r\n if (segmentValue.endsWith('0')) {\r\n // 00:|00 => Type 9 => 00:09|\r\n return padWithZeroesUntilValid(`0${segmentValue.slice(0, paddedMaxValue.length - 1)}`, paddedMaxValue, prefixedZeroesCount + 1);\r\n }\r\n // |19:00 => Type 2 => 2|0:00\r\n return padWithZeroesUntilValid(`${segmentValue.slice(0, paddedMaxValue.length - 1)}0`, paddedMaxValue, prefixedZeroesCount);\r\n}\n\n/**\r\n * Replace fullwidth colon with half width colon\r\n * @param fullWidthColon full width colon\r\n * @returns processed half width colon\r\n */\r\nfunction toHalfWidthColon(fullWidthColon) {\r\n return fullWidthColon.replaceAll(new RegExp(CHAR_JP_COLON, 'g'), CHAR_COLON);\r\n}\n\n/**\r\n * Replace fullwidth numbers with half width number\r\n * @param fullWidthNumber full width number\r\n * @returns processed half width number\r\n */\r\nfunction toHalfWidthNumber(fullWidthNumber) {\r\n return fullWidthNumber.replaceAll(/[0-9]/g, s => String.fromCharCode(s.charCodeAt(0) - 0xfee0));\r\n}\n\n/**\r\n * Convert full width colon (:) to half width one (:)\r\n */\r\nfunction createColonConvertPreprocessor() {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n return {\r\n elementState: {\r\n selection,\r\n value: toHalfWidthColon(value),\r\n },\r\n data: toHalfWidthColon(data),\r\n };\r\n };\r\n}\n\nfunction createDateSegmentsZeroPaddingPostprocessor({ dateModeTemplate, dateSegmentSeparator, splitFn, uniteFn, }) {\r\n return ({ value, selection }) => {\r\n var _a;\r\n const [from, to] = selection;\r\n const { dateStrings, restPart = '' } = splitFn(value);\r\n const validatedDateStrings = [];\r\n let caretShift = 0;\r\n dateStrings.forEach(dateString => {\r\n const parsedDate = parseDateString(dateString, dateModeTemplate);\r\n const dateSegments = Object.entries(parsedDate);\r\n const validatedDateSegments = dateSegments.reduce((acc, [segmentName, segmentValue]) => {\r\n const { validatedSegmentValue, prefixedZeroesCount } = padWithZeroesUntilValid(segmentValue, `${DATE_SEGMENTS_MAX_VALUES[segmentName]}`);\r\n caretShift += prefixedZeroesCount;\r\n return Object.assign(Object.assign({}, acc), { [segmentName]: validatedSegmentValue });\r\n }, {});\r\n validatedDateStrings.push(toDateString(validatedDateSegments, { dateMode: dateModeTemplate }));\r\n });\r\n const validatedValue = uniteFn(validatedDateStrings, value) +\r\n (((_a = dateStrings[dateStrings.length - 1]) === null || _a === void 0 ? void 0 : _a.endsWith(dateSegmentSeparator))\r\n ? dateSegmentSeparator\r\n : '') +\r\n restPart;\r\n if (caretShift && validatedValue[to + 1] === dateSegmentSeparator) {\r\n /**\r\n * If `caretShift` > 0, it means that time segment was padded with zero.\r\n * It is only possible if any character insertion happens.\r\n * If caret is before `dateSegmentSeparator` => it should be moved after `dateSegmentSeparator`.\r\n */\r\n caretShift++;\r\n }\r\n return {\r\n selection: [from + caretShift, to + caretShift],\r\n value: validatedValue,\r\n };\r\n };\r\n}\n\n/**\r\n * It replaces pseudo range separators with valid one.\r\n * @example '01.01.2000_11.11.2000' -> '01.01.2000 - 01.01.2000'\r\n * @example '01.01.2000_23:59' -> '01.01.2000, 23:59'\r\n */\r\nfunction createFirstDateEndSeparatorPreprocessor({ dateModeTemplate, firstDateEndSeparator, dateSegmentSeparator, pseudoFirstDateEndSeparators, }) {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const firstCompleteDate = getFirstCompleteDate(value, dateModeTemplate);\r\n const pseudoSeparators = pseudoFirstDateEndSeparators.filter(x => !firstDateEndSeparator.includes(x) && x !== dateSegmentSeparator);\r\n const pseudoSeparatorsRE = new RegExp(`[${pseudoSeparators.join('')}]`, 'gi');\r\n return {\r\n elementState: {\r\n selection,\r\n value: firstCompleteDate && value.length > firstCompleteDate.length\r\n ? firstCompleteDate +\r\n value\r\n .slice(firstCompleteDate.length)\r\n .replace(/^[\\D\\s]*/, firstDateEndSeparator)\r\n : value,\r\n },\r\n data: data.replace(pseudoSeparatorsRE, firstDateEndSeparator),\r\n };\r\n };\r\n}\n\n/**\r\n * Convert full width numbers like 1, 2 to half width numbers 1, 2\r\n */\r\nfunction createFullWidthToHalfWidthPreprocessor() {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n return {\r\n elementState: {\r\n selection,\r\n value: toHalfWidthNumber(value),\r\n },\r\n data: toHalfWidthNumber(data),\r\n };\r\n };\r\n}\n\nfunction raiseSegmentValueToMin(segments, fullMode) {\r\n const segmentsLength = getDateSegmentValueLength(fullMode);\r\n return Object.fromEntries(Object.entries(segments).map(([key, value]) => {\r\n const segmentLength = segmentsLength[key];\r\n return [\r\n key,\r\n value.length === segmentLength && value.match(/^0+$/)\r\n ? '1'.padStart(segmentLength, '0')\r\n : value,\r\n ];\r\n }));\r\n}\n\nfunction createMinMaxDatePostprocessor({ dateModeTemplate, min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE, rangeSeparator = '', dateSegmentSeparator = '.', }) {\r\n return ({ value, selection }) => {\r\n const endsWithRangeSeparator = rangeSeparator && value.endsWith(rangeSeparator);\r\n const dateStrings = parseDateRangeString(value, dateModeTemplate, rangeSeparator);\r\n let validatedValue = '';\r\n for (const dateString of dateStrings) {\r\n validatedValue += validatedValue ? rangeSeparator : '';\r\n const parsedDate = parseDateString(dateString, dateModeTemplate);\r\n if (!isDateStringComplete(dateString, dateModeTemplate)) {\r\n const fixedDate = raiseSegmentValueToMin(parsedDate, dateModeTemplate);\r\n const fixedValue = toDateString(fixedDate, { dateMode: dateModeTemplate });\r\n const tail = dateString.endsWith(dateSegmentSeparator)\r\n ? dateSegmentSeparator\r\n : '';\r\n validatedValue += fixedValue + tail;\r\n continue;\r\n }\r\n const date = segmentsToDate(parsedDate);\r\n const clampedDate = clamp(date, min, max);\r\n validatedValue += toDateString(dateToSegments(clampedDate), {\r\n dateMode: dateModeTemplate,\r\n });\r\n }\r\n return {\r\n selection,\r\n value: validatedValue + (endsWithRangeSeparator ? rangeSeparator : ''),\r\n };\r\n };\r\n}\n\nfunction normalizeDatePreprocessor({ dateModeTemplate, dateSegmentsSeparator, rangeSeparator = '', dateTimeSeparator = DATE_TIME_SEPARATOR, }) {\r\n return ({ elementState, data }) => {\r\n const separator = rangeSeparator\r\n ? new RegExp(`${rangeSeparator}|-`)\r\n : dateTimeSeparator;\r\n const possibleDates = data.split(separator);\r\n const dates = data.includes(dateTimeSeparator)\r\n ? [possibleDates[0]]\r\n : possibleDates;\r\n if (dates.every(date => date.trim().split(/\\D/).filter(Boolean).length ===\r\n dateModeTemplate.split(dateSegmentsSeparator).length)) {\r\n const newData = dates\r\n .map(date => normalizeDateString(date, dateModeTemplate, dateSegmentsSeparator))\r\n .join(rangeSeparator);\r\n return {\r\n elementState,\r\n data: `${newData}${data.includes(dateTimeSeparator)\r\n ? dateTimeSeparator + possibleDates[1] || ''\r\n : ''}`,\r\n };\r\n }\r\n return { elementState, data };\r\n };\r\n}\r\nfunction normalizeDateString(dateString, template, separator) {\r\n const dateSegments = dateString.split(/\\D/).filter(Boolean);\r\n const templateSegments = template.split(separator);\r\n const normalizedSegments = dateSegments.map((segment, index) => index === templateSegments.length - 1\r\n ? segment\r\n : segment.padStart(templateSegments[index].length, '0'));\r\n return normalizedSegments.join(separator);\r\n}\n\nfunction maskitoPostfixPostprocessorGenerator(postfix) {\r\n const postfixRE = new RegExp(`${escapeRegExp(postfix)}$`);\r\n return postfix\r\n ? ({ value, selection }, initialElementState) => {\r\n if (!value && !initialElementState.value.endsWith(postfix)) {\r\n // cases when developer wants input to be empty (programmatically)\r\n return { value, selection };\r\n }\r\n if (!value.endsWith(postfix) &&\r\n !initialElementState.value.endsWith(postfix)) {\r\n return { selection, value: value + postfix };\r\n }\r\n const initialValueBeforePostfix = initialElementState.value.replace(postfixRE, '');\r\n const postfixWasModified = initialElementState.selection[1] >= initialValueBeforePostfix.length;\r\n const alreadyExistedValueBeforePostfix = findCommonBeginningSubstr(initialValueBeforePostfix, value);\r\n return {\r\n selection,\r\n value: Array.from(postfix)\r\n .reverse()\r\n .reduce((newValue, char, index) => {\r\n const i = newValue.length - 1 - index;\r\n const isInitiallyMirroredChar = alreadyExistedValueBeforePostfix[i] === char &&\r\n postfixWasModified;\r\n return newValue[i] !== char || isInitiallyMirroredChar\r\n ? newValue.slice(0, i + 1) + char + newValue.slice(i + 1)\r\n : newValue;\r\n }, value),\r\n };\r\n }\r\n : identity;\r\n}\n\nfunction maskitoPrefixPostprocessorGenerator(prefix) {\r\n return prefix\r\n ? ({ value, selection }, initialElementState) => {\r\n if (value.startsWith(prefix) || // already valid\r\n (!value && !initialElementState.value.startsWith(prefix)) // cases when developer wants input to be empty\r\n ) {\r\n return { value, selection };\r\n }\r\n const [from, to] = selection;\r\n const prefixedValue = Array.from(prefix).reduce((modifiedValue, char, i) => modifiedValue[i] === char\r\n ? modifiedValue\r\n : modifiedValue.slice(0, i) + char + modifiedValue.slice(i), value);\r\n const addedCharsCount = prefixedValue.length - value.length;\r\n return {\r\n selection: [from + addedCharsCount, to + addedCharsCount],\r\n value: prefixedValue,\r\n };\r\n }\r\n : identity;\r\n}\n\nfunction createValidDatePreprocessor({ dateModeTemplate, dateSegmentsSeparator, rangeSeparator = '', }) {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n if (data === dateSegmentsSeparator) {\r\n return {\r\n elementState,\r\n data: selection[0] === value.length ? data : '',\r\n };\r\n }\r\n const newCharacters = data.replaceAll(new RegExp(`[^\\\\d${escapeRegExp(dateSegmentsSeparator)}${rangeSeparator}]`, 'g'), '');\r\n if (!newCharacters) {\r\n return { elementState, data: '' };\r\n }\r\n const [from, rawTo] = selection;\r\n let to = rawTo + data.length;\r\n const newPossibleValue = value.slice(0, from) + newCharacters + value.slice(to);\r\n const dateStrings = parseDateRangeString(newPossibleValue, dateModeTemplate, rangeSeparator);\r\n let validatedValue = '';\r\n const hasRangeSeparator = Boolean(rangeSeparator) && newPossibleValue.includes(rangeSeparator);\r\n for (const dateString of dateStrings) {\r\n const { validatedDateString, updatedSelection } = validateDateString({\r\n dateString,\r\n dateModeTemplate,\r\n offset: validatedValue.length,\r\n selection: [from, to],\r\n });\r\n if (dateString && !validatedDateString) {\r\n return { elementState, data: '' }; // prevent changes\r\n }\r\n to = updatedSelection[1];\r\n validatedValue +=\r\n hasRangeSeparator && !validatedValue\r\n ? validatedDateString + rangeSeparator\r\n : validatedDateString;\r\n }\r\n const newData = validatedValue.slice(from, to);\r\n return {\r\n elementState: {\r\n selection,\r\n value: validatedValue.slice(0, from) +\r\n newData\r\n .split(dateSegmentsSeparator)\r\n .map(segment => '0'.repeat(segment.length))\r\n .join(dateSegmentsSeparator) +\r\n validatedValue.slice(to),\r\n },\r\n data: newData,\r\n };\r\n };\r\n}\n\nfunction maskitoEventHandler(name, handler, eventListenerOptions) {\r\n return (element, maskitoOptions) => {\r\n const listener = () => handler(element, maskitoOptions);\r\n element.addEventListener(name, listener, eventListenerOptions);\r\n return () => element.removeEventListener(name, listener, eventListenerOptions);\r\n };\r\n}\n\nfunction maskitoAddOnFocusPlugin(value) {\r\n return maskitoEventHandler('focus', element => {\r\n if (!element.value) {\r\n maskitoUpdateElement(element, value);\r\n }\r\n });\r\n}\n\nfunction maskitoCaretGuard(guard) {\r\n return element => {\r\n const document = element.ownerDocument;\r\n let isPointerDown = 0;\r\n const onPointerDown = () => isPointerDown++;\r\n const onPointerUp = () => {\r\n isPointerDown = Math.max(--isPointerDown, 0);\r\n };\r\n const listener = () => {\r\n if (!element.matches(':focus')) {\r\n return;\r\n }\r\n if (isPointerDown) {\r\n return document.addEventListener('mouseup', listener, {\r\n once: true,\r\n passive: true,\r\n });\r\n }\r\n const start = element.selectionStart || 0;\r\n const end = element.selectionEnd || 0;\r\n const [fromLimit, toLimit] = guard(element.value, [start, end]);\r\n if (fromLimit > start || toLimit < end) {\r\n element.setSelectionRange(clamp(start, fromLimit, toLimit), clamp(end, fromLimit, toLimit));\r\n }\r\n };\r\n document.addEventListener('selectionchange', listener, { passive: true });\r\n element.addEventListener('mousedown', onPointerDown, { passive: true });\r\n document.addEventListener('mouseup', onPointerUp, { passive: true });\r\n return () => {\r\n document.removeEventListener('selectionchange', listener);\r\n document.removeEventListener('mousedown', onPointerDown);\r\n document.removeEventListener('mouseup', onPointerUp);\r\n };\r\n };\r\n}\n\nconst maskitoRejectEvent = element => {\r\n const listener = () => {\r\n const value = element.value;\r\n element.addEventListener('beforeinput', event => {\r\n if (event.defaultPrevented && value === element.value) {\r\n element.dispatchEvent(new CustomEvent('maskitoReject', { bubbles: true }));\r\n }\r\n }, { once: true });\r\n };\r\n element.addEventListener('beforeinput', listener, true);\r\n return () => element.removeEventListener('beforeinput', listener, true);\r\n};\n\nfunction maskitoRemoveOnBlurPlugin(value) {\r\n return maskitoEventHandler('blur', element => {\r\n if (element.value === value) {\r\n maskitoUpdateElement(element, '');\r\n }\r\n });\r\n}\n\nconst noop = () => { };\r\nfunction createTimeSegmentsSteppingPlugin({ step, fullMode, timeSegmentMaxValues, }) {\r\n const segmentsIndexes = createTimeSegmentsIndexes(fullMode);\r\n return step <= 0\r\n ? noop\r\n : element => {\r\n const listener = (event) => {\r\n if (event.key !== 'ArrowUp' && event.key !== 'ArrowDown') {\r\n return;\r\n }\r\n event.preventDefault();\r\n const selectionStart = element.selectionStart || 0;\r\n const activeSegment = getActiveSegment({\r\n segmentsIndexes,\r\n selectionStart,\r\n });\r\n if (!activeSegment) {\r\n return;\r\n }\r\n const updatedValue = updateSegmentValue({\r\n selection: segmentsIndexes.get(activeSegment),\r\n value: element.value,\r\n toAdd: event.key === 'ArrowUp' ? step : -step,\r\n max: timeSegmentMaxValues[activeSegment],\r\n });\r\n maskitoUpdateElement(element, {\r\n value: updatedValue,\r\n selection: [selectionStart, selectionStart],\r\n });\r\n };\r\n element.addEventListener('keydown', listener);\r\n return () => element.removeEventListener('keydown', listener);\r\n };\r\n}\r\nfunction createTimeSegmentsIndexes(fullMode) {\r\n return new Map([\r\n ['hours', getSegmentRange(fullMode, 'HH')],\r\n ['minutes', getSegmentRange(fullMode, 'MM')],\r\n ['seconds', getSegmentRange(fullMode, 'SS')],\r\n ['milliseconds', getSegmentRange(fullMode, 'MSS')],\r\n ]);\r\n}\r\nfunction getSegmentRange(mode, segment) {\r\n const index = mode.indexOf(segment);\r\n return index === -1 ? [-1, -1] : [index, index + segment.length];\r\n}\r\nfunction getActiveSegment({ segmentsIndexes, selectionStart, }) {\r\n for (const [segmentName, segmentRange] of segmentsIndexes.entries()) {\r\n const [from, to] = segmentRange;\r\n if (from <= selectionStart && selectionStart <= to) {\r\n return segmentName;\r\n }\r\n }\r\n return null;\r\n}\r\nfunction updateSegmentValue({ selection, value, toAdd, max, }) {\r\n const [from, to] = selection;\r\n const segmentValue = Number(value.slice(from, to).padEnd(to - from, '0'));\r\n const newSegmentValue = mod(segmentValue + toAdd, max + 1);\r\n return (value.slice(0, from) +\r\n String(newSegmentValue).padStart(to - from, '0') +\r\n value.slice(to, value.length));\r\n}\r\nfunction mod(value, max) {\r\n if (value < 0) {\r\n value += Math.floor(Math.abs(value) / max + 1) * max;\r\n }\r\n return value % max;\r\n}\n\nfunction maskitoWithPlaceholder(placeholder, focusedOnly = false) {\r\n let lastClearValue = '';\r\n const removePlaceholder = (value) => {\r\n for (let i = value.length - 1; i >= lastClearValue.length; i--) {\r\n if (value[i] !== placeholder[i]) {\r\n return value.slice(0, i + 1);\r\n }\r\n }\r\n return value.slice(0, lastClearValue.length);\r\n };\r\n const plugins = [maskitoCaretGuard(value => [0, removePlaceholder(value).length])];\r\n let focused = false;\r\n if (focusedOnly) {\r\n const focus = maskitoEventHandler('focus', element => {\r\n focused = true;\r\n maskitoUpdateElement(element, element.value + placeholder.slice(element.value.length));\r\n }, { capture: true });\r\n const blur = maskitoEventHandler('blur', element => {\r\n focused = false;\r\n maskitoUpdateElement(element, removePlaceholder(element.value));\r\n }, { capture: true });\r\n plugins.push(focus, blur);\r\n }\r\n return {\r\n plugins,\r\n removePlaceholder,\r\n preprocessors: [\r\n ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n return {\r\n elementState: {\r\n selection,\r\n value: removePlaceholder(value),\r\n },\r\n data,\r\n };\r\n },\r\n ],\r\n postprocessors: [\r\n ({ value, selection }, initialElementState) => {\r\n lastClearValue = value;\r\n /**\r\n * If `value` still equals to `initialElementState.value`,\r\n * then it means that value is patched programmatically (from Maskito's plugin or externally).\r\n * In this case, we don't want to mutate value and automatically add placeholder.\r\n * ___\r\n * For example, developer wants to remove manually placeholder (+ do something else with value) on blur.\r\n * Without this condition, placeholder will be unexpectedly added again.\r\n */\r\n return value !== initialElementState.value && (focused || !focusedOnly)\r\n ? {\r\n value: value + placeholder.slice(value.length),\r\n selection,\r\n }\r\n : { value, selection };\r\n },\r\n ],\r\n };\r\n}\n\nfunction createZeroPlaceholdersPreprocessor() {\r\n return ({ elementState }, actionType) => {\r\n const { value, selection } = elementState;\r\n if (!value || isLastChar(value, selection)) {\r\n return { elementState };\r\n }\r\n const [from, to] = selection;\r\n const zeroes = value.slice(from, to).replaceAll(/\\d/g, '0');\r\n const newValue = value.slice(0, from) + zeroes + value.slice(to);\r\n if (actionType === 'validation' || (actionType === 'insert' && from === to)) {\r\n return {\r\n elementState: { selection, value: newValue },\r\n };\r\n }\r\n return {\r\n elementState: {\r\n selection: actionType === 'deleteBackward' || actionType === 'insert'\r\n ? [from, from]\r\n : [to, to],\r\n value: newValue,\r\n },\r\n };\r\n };\r\n}\r\nfunction isLastChar(value, [_, to]) {\r\n return to === value.length;\r\n}\n\nfunction maskitoDateOptionsGenerator({ mode, separator = '.', max, min, }) {\r\n const dateModeTemplate = mode.split('/').join(separator);\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: Array.from(dateModeTemplate).map(char => char === separator ? char : /\\d/), overwriteMode: 'replace', preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createZeroPlaceholdersPreprocessor(),\r\n normalizeDatePreprocessor({\r\n dateModeTemplate,\r\n dateSegmentsSeparator: separator,\r\n }),\r\n createValidDatePreprocessor({\r\n dateModeTemplate,\r\n dateSegmentsSeparator: separator,\r\n }),\r\n ], postprocessors: [\r\n createDateSegmentsZeroPaddingPostprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: separator,\r\n splitFn: value => ({ dateStrings: [value] }),\r\n uniteFn: ([dateString]) => dateString,\r\n }),\r\n createMinMaxDatePostprocessor({\r\n min,\r\n max,\r\n dateModeTemplate,\r\n dateSegmentSeparator: separator,\r\n }),\r\n ] });\r\n}\n\nconst POSSIBLE_DATE_RANGE_SEPARATOR = [\r\n CHAR_HYPHEN,\r\n CHAR_EN_DASH,\r\n CHAR_EM_DASH,\r\n CHAR_MINUS,\r\n CHAR_JP_HYPHEN,\r\n];\n\nfunction createMinMaxRangeLengthPostprocessor({ dateModeTemplate, rangeSeparator, minLength, maxLength, max = DEFAULT_MAX_DATE, }) {\r\n if (isEmpty(minLength) && isEmpty(maxLength)) {\r\n return identity;\r\n }\r\n return ({ value, selection }) => {\r\n const dateStrings = parseDateRangeString(value, dateModeTemplate, rangeSeparator);\r\n if (dateStrings.length !== 2 ||\r\n dateStrings.some(date => !isDateStringComplete(date, dateModeTemplate))) {\r\n return { value, selection };\r\n }\r\n const [fromDate, toDate] = dateStrings.map(dateString => segmentsToDate(parseDateString(dateString, dateModeTemplate)));\r\n const minDistantToDate = appendDate(fromDate, Object.assign(Object.assign({}, minLength), { \r\n // 06.02.2023 - 07.02.2023 => {minLength: {day: 3}} => 06.02.2023 - 08.02.2023\r\n // \"from\"-day is included in the range\r\n day: (minLength === null || minLength === void 0 ? void 0 : minLength.day) && minLength.day - 1 }));\r\n const maxDistantToDate = !isEmpty(maxLength)\r\n ? appendDate(fromDate, Object.assign(Object.assign({}, maxLength), { day: (maxLength === null || maxLength === void 0 ? void 0 : maxLength.day) && maxLength.day - 1 }))\r\n : max;\r\n const minLengthClampedToDate = clamp(toDate, minDistantToDate, max);\r\n const minMaxLengthClampedToDate = minLengthClampedToDate > maxDistantToDate\r\n ? maxDistantToDate\r\n : minLengthClampedToDate;\r\n return {\r\n selection,\r\n value: dateStrings[0] +\r\n rangeSeparator +\r\n toDateString(dateToSegments(minMaxLengthClampedToDate), {\r\n dateMode: dateModeTemplate,\r\n }),\r\n };\r\n };\r\n}\n\nfunction createSwapDatesPostprocessor({ dateModeTemplate, rangeSeparator, }) {\r\n return ({ value, selection }) => {\r\n const dateStrings = parseDateRangeString(value, dateModeTemplate, rangeSeparator);\r\n const isDateRangeComplete = dateStrings.length === 2 &&\r\n dateStrings.every(date => isDateStringComplete(date, dateModeTemplate));\r\n const [from, to] = selection;\r\n const caretAtTheEnd = from >= value.length;\r\n const allValueSelected = from === 0 && to >= value.length; // dropping text inside with a pointer\r\n if (!(caretAtTheEnd || allValueSelected) || !isDateRangeComplete) {\r\n return { value, selection };\r\n }\r\n const [fromDate, toDate] = dateStrings.map(dateString => segmentsToDate(parseDateString(dateString, dateModeTemplate)));\r\n return {\r\n selection,\r\n value: fromDate > toDate ? dateStrings.reverse().join(rangeSeparator) : value,\r\n };\r\n };\r\n}\n\nfunction maskitoDateRangeOptionsGenerator({ mode, min, max, minLength, maxLength, dateSeparator = '.', rangeSeparator = `${CHAR_NO_BREAK_SPACE}${CHAR_EN_DASH}${CHAR_NO_BREAK_SPACE}`, }) {\r\n const dateModeTemplate = mode.split('/').join(dateSeparator);\r\n const dateMask = Array.from(dateModeTemplate).map(char => char === dateSeparator ? char : /\\d/);\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: [...dateMask, ...Array.from(rangeSeparator), ...dateMask], overwriteMode: 'replace', preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createFirstDateEndSeparatorPreprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: dateSeparator,\r\n firstDateEndSeparator: rangeSeparator,\r\n pseudoFirstDateEndSeparators: POSSIBLE_DATE_RANGE_SEPARATOR,\r\n }),\r\n createZeroPlaceholdersPreprocessor(),\r\n normalizeDatePreprocessor({\r\n dateModeTemplate,\r\n rangeSeparator,\r\n dateSegmentsSeparator: dateSeparator,\r\n }),\r\n createValidDatePreprocessor({\r\n dateModeTemplate,\r\n rangeSeparator,\r\n dateSegmentsSeparator: dateSeparator,\r\n }),\r\n ], postprocessors: [\r\n createDateSegmentsZeroPaddingPostprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: dateSeparator,\r\n splitFn: value => ({\r\n dateStrings: parseDateRangeString(value, dateModeTemplate, rangeSeparator),\r\n }),\r\n uniteFn: (validatedDateStrings, initialValue) => validatedDateStrings.reduce((acc, dateString, dateIndex) => acc +\r\n dateString +\r\n (!dateIndex && initialValue.includes(rangeSeparator)\r\n ? rangeSeparator\r\n : ''), ''),\r\n }),\r\n createMinMaxDatePostprocessor({\r\n min,\r\n max,\r\n dateModeTemplate,\r\n rangeSeparator,\r\n dateSegmentSeparator: dateSeparator,\r\n }),\r\n createMinMaxRangeLengthPostprocessor({\r\n dateModeTemplate,\r\n minLength,\r\n maxLength,\r\n max,\r\n rangeSeparator,\r\n }),\r\n createSwapDatesPostprocessor({\r\n dateModeTemplate,\r\n rangeSeparator,\r\n }),\r\n ] });\r\n}\n\nfunction padTimeSegments(timeSegments) {\r\n return Object.fromEntries(Object.entries(timeSegments).map(([segmentName, segmentValue]) => [\r\n segmentName,\r\n `${segmentValue}`.padEnd(TIME_SEGMENT_VALUE_LENGTHS[segmentName], '0'),\r\n ]));\r\n}\n\nconst SEGMENT_FULL_NAME = {\r\n HH: 'hours',\r\n MM: 'minutes',\r\n SS: 'seconds',\r\n MSS: 'milliseconds',\r\n};\r\n/**\r\n * @param timeString can be with/without fixed characters\r\n */\r\nfunction parseTimeString(timeString, timeMode) {\r\n const onlyDigits = timeString.replaceAll(/\\D+/g, '');\r\n let offset = 0;\r\n return Object.fromEntries(timeMode.split(/\\W/).map(segmentAbbr => {\r\n const segmentValue = onlyDigits.slice(offset, offset + segmentAbbr.length);\r\n offset += segmentAbbr.length;\r\n return [SEGMENT_FULL_NAME[segmentAbbr], segmentValue];\r\n }));\r\n}\n\nconst LEADING_NON_DIGITS = /^\\D*/;\r\nconst TRAILING_NON_DIGITS = /\\D*$/;\r\nfunction toTimeString({ hours = '', minutes = '', seconds = '', milliseconds = '', }) {\r\n return `${hours}:${minutes}:${seconds}.${milliseconds}`\r\n .replace(LEADING_NON_DIGITS, '')\r\n .replace(TRAILING_NON_DIGITS, '');\r\n}\n\nconst TRAILING_TIME_SEGMENT_SEPARATOR_REG = new RegExp(`[${TIME_FIXED_CHARACTERS.map(escapeRegExp).join('')}]$`);\r\nfunction validateTimeString({ timeString, paddedMaxValues, offset, selection: [from, to], timeMode, }) {\r\n const parsedTime = parseTimeString(timeString, timeMode);\r\n const possibleTimeSegments = Object.entries(parsedTime);\r\n const validatedTimeSegments = {};\r\n let paddedZeroes = 0;\r\n for (const [segmentName, segmentValue] of possibleTimeSegments) {\r\n const validatedTime = toTimeString(validatedTimeSegments);\r\n const maxSegmentValue = paddedMaxValues[segmentName];\r\n const fantomSeparator = validatedTime.length && 1;\r\n const lastSegmentDigitIndex = offset +\r\n validatedTime.length +\r\n fantomSeparator +\r\n TIME_SEGMENT_VALUE_LENGTHS[segmentName];\r\n const isLastSegmentDigitAdded = lastSegmentDigitIndex >= from && lastSegmentDigitIndex <= to;\r\n if (isLastSegmentDigitAdded && Number(segmentValue) > Number(maxSegmentValue)) {\r\n // 2|0:00 => Type 9 => 2|0:00\r\n return { validatedTimeString: '', updatedTimeSelection: [from, to] }; // prevent changes\r\n }\r\n const { validatedSegmentValue, prefixedZeroesCount } = padWithZeroesUntilValid(segmentValue, `${maxSegmentValue}`);\r\n paddedZeroes += prefixedZeroesCount;\r\n validatedTimeSegments[segmentName] = validatedSegmentValue;\r\n }\r\n const [trailingSegmentSeparator = ''] = timeString.match(TRAILING_TIME_SEGMENT_SEPARATOR_REG) || [];\r\n const validatedTimeString = toTimeString(validatedTimeSegments) + trailingSegmentSeparator;\r\n const addedDateSegmentSeparators = Math.max(validatedTimeString.length - timeString.length, 0);\r\n return {\r\n validatedTimeString,\r\n updatedTimeSelection: [\r\n from + paddedZeroes + addedDateSegmentSeparators,\r\n to + paddedZeroes + addedDateSegmentSeparators,\r\n ],\r\n };\r\n}\n\nfunction isDateTimeStringComplete(dateTimeString, { dateMode, timeMode, dateTimeSeparator = DATE_TIME_SEPARATOR, }) {\r\n return (dateTimeString.length >=\r\n dateMode.length + timeMode.length + dateTimeSeparator.length &&\r\n dateTimeString\r\n .split(dateTimeSeparator)[0]\r\n .split(/\\D/)\r\n .every(segment => !segment.match(/^0+$/)));\r\n}\n\nfunction parseDateTimeString(dateTime, { dateModeTemplate, dateTimeSeparator, }) {\r\n const hasSeparator = dateTime.includes(dateTimeSeparator);\r\n return [\r\n dateTime.slice(0, dateModeTemplate.length),\r\n dateTime.slice(hasSeparator\r\n ? dateModeTemplate.length + dateTimeSeparator.length\r\n : dateModeTemplate.length),\r\n ];\r\n}\n\nfunction createMinMaxDateTimePostprocessor({ dateModeTemplate, timeMode, min = DEFAULT_MIN_DATE, max = DEFAULT_MAX_DATE, dateTimeSeparator, }) {\r\n return ({ value, selection }) => {\r\n const [dateString, timeString] = parseDateTimeString(value, {\r\n dateModeTemplate,\r\n dateTimeSeparator,\r\n });\r\n const parsedDate = parseDateString(dateString, dateModeTemplate);\r\n const parsedTime = parseTimeString(timeString, timeMode);\r\n if (!isDateTimeStringComplete(value, {\r\n dateMode: dateModeTemplate,\r\n timeMode,\r\n dateTimeSeparator,\r\n })) {\r\n const fixedDate = raiseSegmentValueToMin(parsedDate, dateModeTemplate);\r\n const { year, month, day } = isDateStringComplete(dateString, dateModeTemplate)\r\n ? dateToSegments(clamp(segmentsToDate(fixedDate), min, max))\r\n : fixedDate;\r\n const fixedValue = toDateString(Object.assign({ year,\r\n month,\r\n day }, parsedTime), { dateMode: dateModeTemplate, dateTimeSeparator, timeMode });\r\n const tail = value.slice(fixedValue.length);\r\n return {\r\n selection,\r\n value: fixedValue + tail,\r\n };\r\n }\r\n const date = segmentsToDate(parsedDate, parsedTime);\r\n const clampedDate = clamp(date, min, max);\r\n const validatedValue = toDateString(dateToSegments(clampedDate), {\r\n dateMode: dateModeTemplate,\r\n dateTimeSeparator,\r\n timeMode,\r\n });\r\n return {\r\n selection,\r\n value: validatedValue,\r\n };\r\n };\r\n}\n\nfunction createValidDateTimePreprocessor({ dateModeTemplate, dateSegmentsSeparator, dateTimeSeparator, timeMode, }) {\r\n const invalidCharsRegExp = new RegExp(`[^\\\\d${TIME_FIXED_CHARACTERS.map(escapeRegExp).join('')}${escapeRegExp(dateSegmentsSeparator)}]+`);\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n if (data === dateSegmentsSeparator) {\r\n return {\r\n elementState,\r\n data: selection[0] === value.length ? data : '',\r\n };\r\n }\r\n const newCharacters = data.replace(invalidCharsRegExp, '');\r\n if (!newCharacters) {\r\n return { elementState, data: '' };\r\n }\r\n const [from, rawTo] = selection;\r\n let to = rawTo + data.length;\r\n const newPossibleValue = value.slice(0, from) + newCharacters + value.slice(to);\r\n const [dateString, timeString] = parseDateTimeString(newPossibleValue, {\r\n dateModeTemplate,\r\n dateTimeSeparator,\r\n });\r\n let validatedValue = '';\r\n const hasDateTimeSeparator = newPossibleValue.includes(dateTimeSeparator);\r\n const { validatedDateString, updatedSelection } = validateDateString({\r\n dateString,\r\n dateModeTemplate,\r\n offset: 0,\r\n selection: [from, to],\r\n });\r\n if (dateString && !validatedDateString) {\r\n return { elementState, data: '' }; // prevent changes\r\n }\r\n to = updatedSelection[1];\r\n validatedValue += validatedDateString;\r\n const paddedMaxValues = padTimeSegments(DEFAULT_TIME_SEGMENT_MAX_VALUES);\r\n const { validatedTimeString, updatedTimeSelection } = validateTimeString({\r\n timeString,\r\n paddedMaxValues,\r\n offset: validatedValue.length + dateTimeSeparator.length,\r\n selection: [from, to],\r\n timeMode,\r\n });\r\n if (timeString && !validatedTimeString) {\r\n return { elementState, data: '' }; // prevent changes\r\n }\r\n to = updatedTimeSelection[1];\r\n validatedValue += hasDateTimeSeparator\r\n ? dateTimeSeparator + validatedTimeString\r\n : validatedTimeString;\r\n const newData = validatedValue.slice(from, to);\r\n return {\r\n elementState: {\r\n selection,\r\n value: validatedValue.slice(0, from) +\r\n newData\r\n .split(dateSegmentsSeparator)\r\n .map(segment => '0'.repeat(segment.length))\r\n .join(dateSegmentsSeparator) +\r\n validatedValue.slice(to),\r\n },\r\n data: newData,\r\n };\r\n };\r\n}\n\nfunction maskitoDateTimeOptionsGenerator({ dateMode, timeMode, dateSeparator = '.', min, max, dateTimeSeparator = DATE_TIME_SEPARATOR, timeStep = 0, }) {\r\n const dateModeTemplate = dateMode.split('/').join(dateSeparator);\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: [\r\n ...Array.from(dateModeTemplate).map(char => char === dateSeparator ? char : /\\d/),\r\n ...dateTimeSeparator.split(''),\r\n ...Array.from(timeMode).map(char => TIME_FIXED_CHARACTERS.includes(char) ? char : /\\d/),\r\n ], overwriteMode: 'replace', preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createColonConvertPreprocessor(),\r\n createFirstDateEndSeparatorPreprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: dateSeparator,\r\n firstDateEndSeparator: dateTimeSeparator,\r\n pseudoFirstDateEndSeparators: dateTimeSeparator.split(''),\r\n }),\r\n createZeroPlaceholdersPreprocessor(),\r\n normalizeDatePreprocessor({\r\n dateModeTemplate,\r\n dateSegmentsSeparator: dateSeparator,\r\n dateTimeSeparator,\r\n }),\r\n createValidDateTimePreprocessor({\r\n dateModeTemplate,\r\n dateSegmentsSeparator: dateSeparator,\r\n dateTimeSeparator,\r\n timeMode,\r\n }),\r\n ], postprocessors: [\r\n createDateSegmentsZeroPaddingPostprocessor({\r\n dateModeTemplate,\r\n dateSegmentSeparator: dateSeparator,\r\n splitFn: value => {\r\n const [dateString, timeString] = parseDateTimeString(value, {\r\n dateModeTemplate,\r\n dateTimeSeparator,\r\n });\r\n return { dateStrings: [dateString], restPart: timeString };\r\n },\r\n uniteFn: ([validatedDateString], initialValue) => validatedDateString +\r\n (initialValue.includes(dateTimeSeparator) ? dateTimeSeparator : ''),\r\n }),\r\n createMinMaxDateTimePostprocessor({\r\n min,\r\n max,\r\n dateModeTemplate,\r\n timeMode,\r\n dateTimeSeparator,\r\n }),\r\n ], plugins: [\r\n createTimeSegmentsSteppingPlugin({\r\n step: timeStep,\r\n fullMode: `${dateModeTemplate}${dateTimeSeparator}${timeMode}`,\r\n timeSegmentMaxValues: DEFAULT_TIME_SEGMENT_MAX_VALUES,\r\n }),\r\n ] });\r\n}\n\n/**\r\n * It drops prefix and postfix from data\r\n * Needed for case, when prefix or postfix contain decimalSeparator, to ignore it in resulting number\r\n * @example User pastes '{prefix}123.45{postfix}' => 123.45\r\n */\r\nfunction createAffixesFilterPreprocessor({ prefix, postfix, }) {\r\n return ({ elementState, data }) => {\r\n const { cleanValue: cleanData } = extractAffixes(data, {\r\n prefix,\r\n postfix,\r\n });\r\n return {\r\n elementState,\r\n data: cleanData,\r\n };\r\n };\r\n}\n\nfunction generateMaskExpression({ decimalSeparator, isNegativeAllowed, precision, thousandSeparator, prefix, postfix, decimalPseudoSeparators = [], pseudoMinuses = [], minusSign, }) {\r\n const computedPrefix = computeAllOptionalCharsRegExp(prefix);\r\n const digit = '\\\\d';\r\n const optionalMinus = isNegativeAllowed\r\n ? `[${minusSign}${pseudoMinuses.map(x => `\\\\${x}`).join('')}]?`\r\n : '';\r\n const integerPart = thousandSeparator\r\n ? `[${digit}${escapeRegExp(thousandSeparator).replaceAll(/\\s/g, '\\\\s')}]*`\r\n : `[${digit}]*`;\r\n const decimalPart = precision > 0\r\n ? `([${escapeRegExp(decimalSeparator)}${decimalPseudoSeparators\r\n .map(escapeRegExp)\r\n .join('')}]${digit}{0,${Number.isFinite(precision) ? precision : ''}})?`\r\n : '';\r\n const computedPostfix = computeAllOptionalCharsRegExp(postfix);\r\n return new RegExp(`^${computedPrefix}${optionalMinus}${integerPart}${decimalPart}${computedPostfix}$`);\r\n}\r\nfunction computeAllOptionalCharsRegExp(str) {\r\n return str\r\n ? `${str\r\n .split('')\r\n .map(char => `${escapeRegExp(char)}?`)\r\n .join('')}`\r\n : '';\r\n}\n\nfunction maskitoParseNumber(maskedNumber, decimalSeparator = '.') {\r\n const hasNegativeSign = !!maskedNumber.match(new RegExp(`^\\\\D*[${CHAR_MINUS}\\\\${CHAR_HYPHEN}${CHAR_EN_DASH}${CHAR_EM_DASH}${CHAR_JP_HYPHEN}]`));\r\n const escapedDecimalSeparator = escapeRegExp(decimalSeparator);\r\n const unmaskedNumber = maskedNumber\r\n // drop all decimal separators not followed by a digit\r\n .replaceAll(new RegExp(`${escapedDecimalSeparator}(?!\\\\d)`, 'g'), '')\r\n // drop all non-digit characters except decimal separator\r\n .replaceAll(new RegExp(`[^\\\\d${escapedDecimalSeparator}]`, 'g'), '')\r\n .replace(decimalSeparator, '.');\r\n return unmaskedNumber\r\n ? Number((hasNegativeSign ? CHAR_HYPHEN : '') + unmaskedNumber)\r\n : NaN;\r\n}\n\n/**\r\n * Convert number to string with replacing exponent part on decimals\r\n *\r\n * @param value the number\r\n * @return string representation of a number\r\n */\r\nfunction stringifyNumberWithoutExp(value) {\r\n const valueAsString = String(value);\r\n const [numberPart, expPart] = valueAsString.split('e-');\r\n let valueWithoutExp = valueAsString;\r\n if (expPart) {\r\n const [, fractionalPart] = numberPart.split('.');\r\n const decimalDigits = Number(expPart) + ((fractionalPart === null || fractionalPart === void 0 ? void 0 : fractionalPart.length) || 0);\r\n valueWithoutExp = value.toFixed(decimalDigits);\r\n }\r\n return valueWithoutExp;\r\n}\n\nfunction toNumberParts(value, { decimalSeparator, thousandSeparator, }) {\r\n const [integerWithMinus = '', decimalPart = ''] = value.split(decimalSeparator);\r\n const [, minus = '', integerPart = ''] = integerWithMinus.match(new RegExp(`([^\\\\d${escapeRegExp(thousandSeparator)}]+)?(.*)`)) || [];\r\n return { minus, integerPart, decimalPart };\r\n}\n\nfunction validateDecimalPseudoSeparators({ decimalSeparator, thousandSeparator, decimalPseudoSeparators = DEFAULT_DECIMAL_PSEUDO_SEPARATORS, }) {\r\n return decimalPseudoSeparators.filter(char => char !== thousandSeparator && char !== decimalSeparator);\r\n}\n\n/**\r\n * If `decimalZeroPadding` is `true`, it pads decimal part with zeroes\r\n * (until number of digits after decimalSeparator is equal to the `precision`).\r\n * @example 1,42 => (`precision` is equal to 4) => 1,4200.\r\n */\r\nfunction createDecimalZeroPaddingPostprocessor({ decimalSeparator, precision, decimalZeroPadding, prefix, postfix, }) {\r\n if (precision <= 0 || !decimalZeroPadding) {\r\n return identity;\r\n }\r\n return ({ value, selection }) => {\r\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n if (Number.isNaN(maskitoParseNumber(cleanValue, decimalSeparator))) {\r\n return { value, selection };\r\n }\r\n const [integerPart, decimalPart = ''] = cleanValue.split(decimalSeparator);\r\n return {\r\n value: extractedPrefix +\r\n integerPart +\r\n decimalSeparator +\r\n decimalPart.padEnd(precision, '0') +\r\n extractedPostfix,\r\n selection,\r\n };\r\n };\r\n}\n\n/**\r\n * Make textfield empty if there is no integer part and all decimal digits are zeroes.\r\n * @example 0|,00 => Backspace => Empty.\r\n * @example -0|,00 => Backspace => -.\r\n * @example ,42| => Backspace x2 => ,|00 => Backspace => Empty\r\n */\r\nfunction emptyPostprocessor({ prefix, postfix, decimalSeparator, thousandSeparator, }) {\r\n return ({ value, selection }) => {\r\n const [caretIndex] = selection;\r\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const { minus, integerPart, decimalPart } = toNumberParts(cleanValue, {\r\n decimalSeparator,\r\n thousandSeparator,\r\n });\r\n const aloneDecimalSeparator = !integerPart && !decimalPart && cleanValue.includes(decimalSeparator);\r\n if ((!integerPart &&\r\n !Number(decimalPart) &&\r\n caretIndex === (minus + extractedPrefix).length) ||\r\n aloneDecimalSeparator) {\r\n return {\r\n selection,\r\n value: extractedPrefix + minus + extractedPostfix,\r\n };\r\n }\r\n return { value, selection };\r\n };\r\n}\n\n/**\r\n * This preprocessor works only once at initialization phase (when `new Maskito(...)` is executed).\r\n * This preprocessor helps to avoid conflicts during transition from one mask to another (for the same input).\r\n * For example, the developer changes postfix (or other mask's props) during run-time.\r\n * ```\r\n * let maskitoOptions = maskitoNumberOptionsGenerator({postfix: ' year'});\r\n * // [3 seconds later]\r\n * maskitoOptions = maskitoNumberOptionsGenerator({postfix: ' years'});\r\n * ```\r\n */\r\nfunction createInitializationOnlyPreprocessor({ decimalSeparator, decimalPseudoSeparators, pseudoMinuses, prefix, postfix, minusSign, }) {\r\n let isInitializationPhase = true;\r\n const cleanNumberMask = generateMaskExpression({\r\n decimalSeparator,\r\n decimalPseudoSeparators,\r\n pseudoMinuses,\r\n prefix: '',\r\n postfix: '',\r\n thousandSeparator: '',\r\n precision: Infinity,\r\n isNegativeAllowed: true,\r\n minusSign,\r\n });\r\n return ({ elementState, data }) => {\r\n if (!isInitializationPhase) {\r\n return { elementState, data };\r\n }\r\n isInitializationPhase = false;\r\n const { value, selection } = elementState;\r\n const [from, to] = selection;\r\n const { extractedPrefix, cleanValue, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const cleanState = maskitoTransform({\r\n selection: [\r\n Math.max(from - extractedPrefix.length, 0),\r\n clamp(to - extractedPrefix.length, 0, cleanValue.length),\r\n ],\r\n value: cleanValue,\r\n }, {\r\n mask: cleanNumberMask,\r\n });\r\n const [cleanFrom, cleanTo] = cleanState.selection;\r\n return {\r\n elementState: {\r\n selection: [\r\n cleanFrom + extractedPrefix.length,\r\n cleanTo + extractedPrefix.length,\r\n ],\r\n value: extractedPrefix + cleanState.value + extractedPostfix,\r\n },\r\n data,\r\n };\r\n };\r\n}\n\n/**\r\n * It removes repeated leading zeroes for integer part.\r\n * @example 0,|00005 => Backspace => |5\r\n * @example -0,|00005 => Backspace => -|5\r\n * @example User types \"000000\" => 0|\r\n * @example 0| => User types \"5\" => 5|\r\n */\r\nfunction createLeadingZeroesValidationPostprocessor({ decimalSeparator, thousandSeparator, prefix, postfix, }) {\r\n const trimLeadingZeroes = (value) => {\r\n const escapedThousandSeparator = escapeRegExp(thousandSeparator);\r\n return value\r\n .replace(\r\n // all leading zeroes followed by another zero\r\n new RegExp(`^(\\\\D+)?[0${escapedThousandSeparator}]+(?=0)`), '$1')\r\n .replace(\r\n // zero followed by not-zero digit\r\n new RegExp(`^(\\\\D+)?[0${escapedThousandSeparator}]+(?=[1-9])`), '$1');\r\n };\r\n const countTrimmedZeroesBefore = (value, index) => {\r\n const valueBefore = value.slice(0, index);\r\n const followedByZero = value.slice(index).startsWith('0');\r\n return (valueBefore.length -\r\n trimLeadingZeroes(valueBefore).length +\r\n (followedByZero ? 1 : 0));\r\n };\r\n return ({ value, selection }) => {\r\n const [from, to] = selection;\r\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const hasDecimalSeparator = cleanValue.includes(decimalSeparator);\r\n const [integerPart, decimalPart = ''] = cleanValue.split(decimalSeparator);\r\n const zeroTrimmedIntegerPart = trimLeadingZeroes(integerPart);\r\n if (integerPart === zeroTrimmedIntegerPart) {\r\n return { value, selection };\r\n }\r\n const newFrom = from - countTrimmedZeroesBefore(value, from);\r\n const newTo = to - countTrimmedZeroesBefore(value, to);\r\n return {\r\n value: extractedPrefix +\r\n zeroTrimmedIntegerPart +\r\n (hasDecimalSeparator ? decimalSeparator : '') +\r\n decimalPart +\r\n extractedPostfix,\r\n selection: [Math.max(newFrom, 0), Math.max(newTo, 0)],\r\n };\r\n };\r\n}\n\n/**\r\n * This postprocessor is connected with {@link createMinMaxPlugin}:\r\n * both validate `min`/`max` bounds of entered value (but at the different point of time).\r\n */\r\nfunction createMinMaxPostprocessor({ min, max, decimalSeparator, minusSign, }) {\r\n return ({ value, selection }) => {\r\n const parsedNumber = maskitoParseNumber(value, decimalSeparator);\r\n const limitedValue = \r\n /**\r\n * We cannot limit lower bound if user enters positive number.\r\n * The same for upper bound and negative number.\r\n * ___\r\n * @example (min = 5)\r\n * Empty input => Without this condition user cannot type 42 (the first digit will be rejected)\r\n * ___\r\n * @example (max = -10)\r\n * Value is -10 => Without this condition user cannot delete 0 to enter another digit\r\n */\r\n parsedNumber > 0 ? Math.min(parsedNumber, max) : Math.max(parsedNumber, min);\r\n if (parsedNumber && limitedValue !== parsedNumber) {\r\n const newValue = `${limitedValue}`\r\n .replace('.', decimalSeparator)\r\n .replace(CHAR_HYPHEN, minusSign);\r\n return {\r\n value: newValue,\r\n selection: [newValue.length, newValue.length],\r\n };\r\n }\r\n return {\r\n value,\r\n selection,\r\n };\r\n };\r\n}\n\n/**\r\n * Manage caret-navigation when user \"deletes\" non-removable digits or separators\r\n * @example 1,|42 => Backspace => 1|,42 (only if `decimalZeroPadding` is `true`)\r\n * @example 1|,42 => Delete => 1,|42 (only if `decimalZeroPadding` is `true`)\r\n * @example 0,|00 => Delete => 0,0|0 (only if `decimalZeroPadding` is `true`)\r\n * @example 1 |000 => Backspace => 1| 000 (always)\r\n */\r\nfunction createNonRemovableCharsDeletionPreprocessor({ decimalSeparator, thousandSeparator, decimalZeroPadding, }) {\r\n return ({ elementState, data }, actionType) => {\r\n const { value, selection } = elementState;\r\n const [from, to] = selection;\r\n const selectedCharacters = value.slice(from, to);\r\n const nonRemovableSeparators = decimalZeroPadding\r\n ? [decimalSeparator, thousandSeparator]\r\n : [thousandSeparator];\r\n const areNonRemovableZeroesSelected = decimalZeroPadding &&\r\n from > value.indexOf(decimalSeparator) &&\r\n Boolean(selectedCharacters.match(/^0+$/gi));\r\n if ((actionType !== 'deleteBackward' && actionType !== 'deleteForward') ||\r\n (!nonRemovableSeparators.includes(selectedCharacters) &&\r\n !areNonRemovableZeroesSelected)) {\r\n return {\r\n elementState,\r\n data,\r\n };\r\n }\r\n return {\r\n elementState: {\r\n value,\r\n selection: actionType === 'deleteForward' ? [to, to] : [from, from],\r\n },\r\n data,\r\n };\r\n };\r\n}\n\n/**\r\n * It pads integer part with zero if user types decimal separator (for empty input).\r\n * @example Empty input => User types \",\" (decimal separator) => 0,|\r\n */\r\nfunction createNotEmptyIntegerPartPreprocessor({ decimalSeparator, precision, prefix, postfix, }) {\r\n const startWithDecimalSepRegExp = new RegExp(`^\\\\D*${escapeRegExp(decimalSeparator)}`);\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const { cleanValue, extractedPrefix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const [from, to] = selection;\r\n const cleanFrom = clamp(from - extractedPrefix.length, 0, cleanValue.length);\r\n const cleanTo = clamp(to - extractedPrefix.length, 0, cleanValue.length);\r\n if (precision <= 0 ||\r\n cleanValue.slice(0, cleanFrom).includes(decimalSeparator) ||\r\n cleanValue.slice(cleanTo).includes(decimalSeparator) ||\r\n !data.match(startWithDecimalSepRegExp)) {\r\n return { elementState, data };\r\n }\r\n const digitsBeforeCursor = cleanValue.slice(0, cleanFrom).match(/\\d+/);\r\n return {\r\n elementState,\r\n data: digitsBeforeCursor ? data : `0${data}`,\r\n };\r\n };\r\n}\n\n/**\r\n * It replaces pseudo characters with valid one.\r\n * @example User types '.' (but separator is equal to comma) => dot is replaced with comma.\r\n * @example User types hyphen / en-dash / em-dash => it is replaced with minus.\r\n */\r\nfunction createPseudoCharactersPreprocessor({ validCharacter, pseudoCharacters, prefix, postfix, }) {\r\n const pseudoCharactersRegExp = new RegExp(`[${pseudoCharacters.join('')}]`, 'gi');\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const { cleanValue, extractedPostfix, extractedPrefix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n return {\r\n elementState: {\r\n selection,\r\n value: extractedPrefix +\r\n cleanValue.replace(pseudoCharactersRegExp, validCharacter) +\r\n extractedPostfix,\r\n },\r\n data: data.replace(pseudoCharactersRegExp, validCharacter),\r\n };\r\n };\r\n}\n\n/**\r\n * It rejects new typed decimal separator if it already exists in text field.\r\n * Behaviour is similar to native <input type=\"number\"> (Chrome).\r\n * @example 1|23,45 => Press comma (decimal separator) => 1|23,45 (do nothing).\r\n */\r\nfunction createRepeatedDecimalSeparatorPreprocessor({ decimalSeparator, prefix, postfix, }) {\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const [from, to] = selection;\r\n const { cleanValue } = extractAffixes(value, { prefix, postfix });\r\n return {\r\n elementState,\r\n data: !cleanValue.includes(decimalSeparator) ||\r\n value.slice(from, to + 1).includes(decimalSeparator)\r\n ? data\r\n : data.replaceAll(new RegExp(escapeRegExp(decimalSeparator), 'gi'), ''),\r\n };\r\n };\r\n}\n\n/**\r\n * It adds symbol for separating thousands.\r\n * @example 1000000 => (thousandSeparator is equal to space) => 1 000 000.\r\n */\r\nfunction createThousandSeparatorPostprocessor({ thousandSeparator, decimalSeparator, prefix, postfix, }) {\r\n if (!thousandSeparator) {\r\n return identity;\r\n }\r\n const isAllSpaces = (...chars) => chars.every(x => /\\s/.test(x));\r\n return ({ value, selection }) => {\r\n const { cleanValue, extractedPostfix, extractedPrefix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const { minus, integerPart, decimalPart } = toNumberParts(cleanValue, {\r\n decimalSeparator,\r\n thousandSeparator,\r\n });\r\n const [initialFrom, initialTo] = selection;\r\n let [from, to] = selection;\r\n const processedIntegerPart = Array.from(integerPart).reduceRight((formattedValuePart, char, i) => {\r\n const isLeadingThousandSeparator = !i && char === thousandSeparator;\r\n const isPositionForSeparator = !isLeadingThousandSeparator &&\r\n formattedValuePart.length &&\r\n (formattedValuePart.length + 1) % 4 === 0;\r\n if (isPositionForSeparator &&\r\n (char === thousandSeparator || isAllSpaces(char, thousandSeparator))) {\r\n return thousandSeparator + formattedValuePart;\r\n }\r\n if (char === thousandSeparator && !isPositionForSeparator) {\r\n if (i && i <= initialFrom) {\r\n from--;\r\n }\r\n if (i && i <= initialTo) {\r\n to--;\r\n }\r\n return formattedValuePart;\r\n }\r\n if (!isPositionForSeparator) {\r\n return char + formattedValuePart;\r\n }\r\n if (i <= initialFrom) {\r\n from++;\r\n }\r\n if (i <= initialTo) {\r\n to++;\r\n }\r\n return char + thousandSeparator + formattedValuePart;\r\n }, '');\r\n return {\r\n value: extractedPrefix +\r\n minus +\r\n processedIntegerPart +\r\n (cleanValue.includes(decimalSeparator) ? decimalSeparator : '') +\r\n decimalPart +\r\n extractedPostfix,\r\n selection: [from, to],\r\n };\r\n };\r\n}\n\n/**\r\n * It drops decimal part if precision is zero.\r\n * @example User pastes '123.45' (but precision is zero) => 123\r\n */\r\nfunction createZeroPrecisionPreprocessor({ precision, decimalSeparator, prefix, postfix, }) {\r\n if (precision > 0) {\r\n return identity;\r\n }\r\n const decimalPartRegExp = new RegExp(`${escapeRegExp(decimalSeparator)}.*$`, 'g');\r\n return ({ elementState, data }) => {\r\n const { value, selection } = elementState;\r\n const { cleanValue, extractedPrefix, extractedPostfix } = extractAffixes(value, {\r\n prefix,\r\n postfix,\r\n });\r\n const [from, to] = selection;\r\n const newValue = extractedPrefix +\r\n cleanValue.replace(decimalPartRegExp, '') +\r\n extractedPostfix;\r\n return {\r\n elementState: {\r\n selection: [\r\n Math.min(from, newValue.length),\r\n Math.min(to, newValue.length),\r\n ],\r\n value: newValue,\r\n },\r\n data: data.replace(decimalPartRegExp, ''),\r\n };\r\n };\r\n}\n\nconst DUMMY_SELECTION = [0, 0];\r\n/**\r\n * It removes repeated leading zeroes for integer part on blur-event.\r\n * @example 000000 => blur => 0\r\n * @example 00005 => blur => 5\r\n */\r\nfunction createLeadingZeroesValidationPlugin({ decimalSeparator, thousandSeparator, prefix, postfix, }) {\r\n const dropRepeatedLeadingZeroes = createLeadingZeroesValidationPostprocessor({\r\n decimalSeparator,\r\n thousandSeparator,\r\n prefix,\r\n postfix,\r\n });\r\n return maskitoEventHandler('blur', element => {\r\n const newValue = dropRepeatedLeadingZeroes({\r\n value: element.value,\r\n selection: DUMMY_SELECTION,\r\n }, { value: '', selection: DUMMY_SELECTION }).value;\r\n maskitoUpdateElement(element, newValue);\r\n }, { capture: true });\r\n}\n\n/**\r\n * This plugin is connected with {@link createMinMaxPostprocessor}:\r\n * both validate `min`/`max` bounds of entered value (but at the different point of time).\r\n */\r\nfunction createMinMaxPlugin({ min, max, decimalSeparator, }) {\r\n return maskitoEventHandler('blur', (element, options) => {\r\n const parsedNumber = maskitoParseNumber(element.value, decimalSeparator);\r\n const clampedNumber = clamp(parsedNumber, min, max);\r\n if (!Number.isNaN(parsedNumber) && parsedNumber !== clampedNumber) {\r\n maskitoUpdateElement(element, maskitoTransform(stringifyNumberWithoutExp(clampedNumber), options));\r\n }\r\n }, { capture: true });\r\n}\n\n/**\r\n * It pads EMPTY integer part with zero if decimal parts exists.\r\n * It works on blur event only!\r\n * @example 1|,23 => Backspace => Blur => 0,23\r\n */\r\nfunction createNotEmptyIntegerPlugin({ decimalSeparator, prefix, postfix, }) {\r\n return maskitoEventHandler('blur', element => {\r\n const { cleanValue, extractedPostfix, extractedPrefix } = extractAffixes(element.value, { prefix, postfix });\r\n const newValue = extractedPrefix +\r\n cleanValue.replace(new RegExp(`^(\\\\D+)?${escapeRegExp(decimalSeparator)}`), `$10${decimalSeparator}`) +\r\n extractedPostfix;\r\n maskitoUpdateElement(element, newValue);\r\n }, { capture: true });\r\n}\n\nfunction maskitoNumberOptionsGenerator({ max = Number.MAX_SAFE_INTEGER, min = Number.MIN_SAFE_INTEGER, precision = 0, thousandSeparator = CHAR_NO_BREAK_SPACE, decimalSeparator = '.', decimalPseudoSeparators, decimalZeroPadding = false, prefix: unsafePrefix = '', postfix = '', minusSign = CHAR_MINUS, } = {}) {\r\n const pseudoMinuses = [\r\n CHAR_HYPHEN,\r\n CHAR_EN_DASH,\r\n CHAR_EM_DASH,\r\n CHAR_JP_HYPHEN,\r\n CHAR_MINUS,\r\n ].filter(char => char !== thousandSeparator && char !== decimalSeparator && char !== minusSign);\r\n const validatedDecimalPseudoSeparators = validateDecimalPseudoSeparators({\r\n decimalSeparator,\r\n thousandSeparator,\r\n decimalPseudoSeparators,\r\n });\r\n const prefix = unsafePrefix.endsWith(decimalSeparator) && precision > 0\r\n ? `${unsafePrefix}${CHAR_ZERO_WIDTH_SPACE}`\r\n : unsafePrefix;\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: generateMaskExpression({\r\n decimalSeparator,\r\n precision,\r\n thousandSeparator,\r\n prefix,\r\n postfix,\r\n isNegativeAllowed: min < 0,\r\n minusSign,\r\n }), preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createInitializationOnlyPreprocessor({\r\n decimalSeparator,\r\n decimalPseudoSeparators: validatedDecimalPseudoSeparators,\r\n pseudoMinuses,\r\n prefix,\r\n postfix,\r\n minusSign,\r\n }),\r\n createAffixesFilterPreprocessor({ prefix, postfix }),\r\n createPseudoCharactersPreprocessor({\r\n validCharacter: minusSign,\r\n pseudoCharacters: pseudoMinuses,\r\n prefix,\r\n postfix,\r\n }),\r\n createPseudoCharactersPreprocessor({\r\n validCharacter: decimalSeparator,\r\n pseudoCharacters: validatedDecimalPseudoSeparators,\r\n prefix,\r\n postfix,\r\n }),\r\n createNotEmptyIntegerPartPreprocessor({\r\n decimalSeparator,\r\n precision,\r\n prefix,\r\n postfix,\r\n }),\r\n createNonRemovableCharsDeletionPreprocessor({\r\n decimalSeparator,\r\n decimalZeroPadding,\r\n thousandSeparator,\r\n }),\r\n createZeroPrecisionPreprocessor({\r\n precision,\r\n decimalSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n createRepeatedDecimalSeparatorPreprocessor({\r\n decimalSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n ], postprocessors: [\r\n createMinMaxPostprocessor({ decimalSeparator, min, max, minusSign }),\r\n maskitoPrefixPostprocessorGenerator(prefix),\r\n maskitoPostfixPostprocessorGenerator(postfix),\r\n createThousandSeparatorPostprocessor({\r\n decimalSeparator,\r\n thousandSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n createDecimalZeroPaddingPostprocessor({\r\n decimalSeparator,\r\n decimalZeroPadding,\r\n precision,\r\n prefix,\r\n postfix,\r\n }),\r\n emptyPostprocessor({ prefix, postfix, decimalSeparator, thousandSeparator }),\r\n ], plugins: [\r\n createLeadingZeroesValidationPlugin({\r\n decimalSeparator,\r\n thousandSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n createNotEmptyIntegerPlugin({\r\n decimalSeparator,\r\n prefix,\r\n postfix,\r\n }),\r\n createMinMaxPlugin({ min, max, decimalSeparator }),\r\n ], overwriteMode: decimalZeroPadding\r\n ? ({ value, selection: [from] }) => from <= value.indexOf(decimalSeparator) ? 'shift' : 'replace'\r\n : 'shift' });\r\n}\n\nfunction createMaxValidationPreprocessor(timeSegmentMaxValues, timeMode) {\r\n const paddedMaxValues = padTimeSegments(timeSegmentMaxValues);\r\n const invalidCharsRegExp = new RegExp(`[^\\\\d${TIME_FIXED_CHARACTERS.map(escapeRegExp).join('')}]+`);\r\n return ({ elementState, data }, actionType) => {\r\n if (actionType === 'deleteBackward' || actionType === 'deleteForward') {\r\n return { elementState, data };\r\n }\r\n const { value, selection } = elementState;\r\n if (actionType === 'validation') {\r\n const { validatedTimeString, updatedTimeSelection } = validateTimeString({\r\n timeString: value,\r\n paddedMaxValues,\r\n offset: 0,\r\n selection,\r\n timeMode,\r\n });\r\n return {\r\n elementState: {\r\n value: validatedTimeString,\r\n selection: updatedTimeSelection,\r\n },\r\n data,\r\n };\r\n }\r\n const newCharacters = data.replace(invalidCharsRegExp, '');\r\n const [from, rawTo] = selection;\r\n let to = rawTo + newCharacters.length; // to be conformed with `overwriteMode: replace`\r\n const newPossibleValue = value.slice(0, from) + newCharacters + value.slice(to);\r\n const { validatedTimeString, updatedTimeSelection } = validateTimeString({\r\n timeString: newPossibleValue,\r\n paddedMaxValues,\r\n offset: 0,\r\n selection: [from, to],\r\n timeMode,\r\n });\r\n if (newPossibleValue && !validatedTimeString) {\r\n return { elementState, data: '' }; // prevent changes\r\n }\r\n to = updatedTimeSelection[1];\r\n const newData = validatedTimeString.slice(from, to);\r\n return {\r\n elementState: {\r\n selection,\r\n value: validatedTimeString.slice(0, from) +\r\n '0'.repeat(newData.length) +\r\n validatedTimeString.slice(to),\r\n },\r\n data: newData,\r\n };\r\n };\r\n}\n\nfunction maskitoTimeOptionsGenerator({ mode, timeSegmentMaxValues = {}, step = 0, }) {\r\n const enrichedTimeSegmentMaxValues = Object.assign(Object.assign({}, DEFAULT_TIME_SEGMENT_MAX_VALUES), timeSegmentMaxValues);\r\n return Object.assign(Object.assign({}, MASKITO_DEFAULT_OPTIONS), { mask: Array.from(mode).map(char => TIME_FIXED_CHARACTERS.includes(char) ? char : /\\d/), preprocessors: [\r\n createFullWidthToHalfWidthPreprocessor(),\r\n createColonConvertPreprocessor(),\r\n createZeroPlaceholdersPreprocessor(),\r\n createMaxValidationPreprocessor(enrichedTimeSegmentMaxValues, mode),\r\n ], plugins: [\r\n createTimeSegmentsSteppingPlugin({\r\n fullMode: mode,\r\n step,\r\n timeSegmentMaxValues: enrichedTimeSegmentMaxValues,\r\n }),\r\n ], overwriteMode: 'replace' });\r\n}\n\nexport { maskitoAddOnFocusPlugin, maskitoCaretGuard, maskitoDateOptionsGenerator, maskitoDateRangeOptionsGenerator, maskitoDateTimeOptionsGenerator, maskitoEventHandler, maskitoNumberOptionsGenerator, maskitoParseNumber, maskitoPostfixPostprocessorGenerator, maskitoPrefixPostprocessorGenerator, maskitoRejectEvent, maskitoRemoveOnBlurPlugin, maskitoTimeOptionsGenerator, maskitoWithPlaceholder };\n","import { Maskito, MASKITO_DEFAULT_ELEMENT_PREDICATE } from '@maskito/core';\nimport { useLayoutEffect, useEffect, useState, useCallback, useRef } from 'react';\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nfunction isThenable(x) {\n return x && typeof x === 'object' && 'then' in x;\n}\n/**\r\n * Hook for convenient use of Maskito in React\r\n * @description For controlled inputs use `onInput` event\r\n * @param options options used for creating Maskito\r\n * @param elementPredicate function that can help find nested Input or TextArea\r\n * @returns ref callback to pass it in React Element\r\n * @example\r\n * // To avoid unnecessary hook runs with Maskito recreation pass named variables\r\n * // good example ✅\r\n * useMaskito({ options: maskitoOptions, elementPredicate: maskitoPredicate })\r\n *\r\n * // bad example ❌\r\n * useMaskito({ options: { mask: /^.*$/ }, elementPredicate: () => e.querySelector('input') })\r\n */\nconst useMaskito = ({\n options = null,\n elementPredicate = MASKITO_DEFAULT_ELEMENT_PREDICATE\n} = {}) => {\n const [hostElement, setHostElement] = useState(null);\n const [element, setElement] = useState(null);\n const onRefChange = useCallback(node => {\n setHostElement(node);\n }, []);\n const latestPredicateRef = useRef(elementPredicate);\n latestPredicateRef.current = elementPredicate;\n useIsomorphicLayoutEffect(() => {\n if (!hostElement) {\n return;\n }\n const predicate = elementPredicate;\n const elementOrPromise = predicate(hostElement);\n if (isThenable(elementOrPromise)) {\n void elementOrPromise.then(el => {\n if (latestPredicateRef.current === predicate) {\n setElement(el);\n }\n });\n } else {\n setElement(elementOrPromise);\n }\n }, [hostElement, elementPredicate, latestPredicateRef]);\n useIsomorphicLayoutEffect(() => {\n if (!element || !options) {\n return;\n }\n const maskedElement = new Maskito(element, options);\n return () => {\n maskedElement.destroy();\n };\n }, [options, element]);\n return onRefChange;\n};\n\nexport { useMaskito };\n"],"names":[],"mappings":";;AAAA,SAAS,2BAA2B,CAAC,OAAO,EAAE;AAC9C,IAAI,MAAM,EAAE,YAAY,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;AAC7F,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACrD,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AACnD,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACtB,CAAC;AACD;AACA,SAAS,2BAA2B,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;AAC1D,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC;AACf,IAAI,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;AAC3C,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;AACzC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,IAAI,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;AACpJ,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/I,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;AAC9C,IAAI,IAAI,SAAS,EAAE;AACnB,QAAQ,SAAS,CAAC,eAAe,EAAE,CAAC;AACpC,QAAQ,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClC,KAAK;AACL,CAAC;AACD;AACA,MAAM,sBAAsB,CAAC;AAC7B,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,QAAQ,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAClC,KAAK;AACL,IAAI,IAAI,KAAK,GAAG;AAChB,QAAQ,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC7D,KAAK;AACL,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AACrB;AACA,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC9D,KAAK;AACL,IAAI,IAAI,cAAc,GAAG;AACzB,QAAQ,OAAO,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,OAAO,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,KAAK;AACL,IAAI,iBAAiB,CAAC,IAAI,EAAE,EAAE,EAAE;AAChC,QAAQ,2BAA2B,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACxE,KAAK;AACL,IAAI,MAAM,GAAG;AACb,QAAQ,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACrD,KAAK;AACL,CAAC;AACD,SAAS,2BAA2B,CAAC,OAAO,EAAE;AAC9C,IAAI,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;AACxD,IAAI,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;AAC9B,QAAQ,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE;AAC1B,YAAY,IAAI,IAAI,IAAI,OAAO,EAAE;AACjC,gBAAgB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;AACrC,aAAa;AACb,YAAY,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAChD,YAAY,OAAO,OAAO,cAAc,KAAK,UAAU;AACvD,kBAAkB,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7C,kBAAkB,cAAc,CAAC;AACjC,SAAS;AACT,QAAQ,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE;AACzC,YAAY,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;AACxF,SAAS;AACT,KAAK,CAAC,CAAC;AACP,CAAC;AACD;AACA,MAAM,iCAAiC,GAAG,CAAC,IAAI,CAAC,CAAC,iBAAiB;AAClE,MAAM,2BAA2B,CAAC,CAAC,CAAC;AACpC,MAAM,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC;AACvC,QAAQ,CAAC,CAAC;AACV;AACK,MAAC,uBAAuB,GAAG;AAChC,IAAI,IAAI,EAAE,MAAM;AAChB,IAAI,aAAa,EAAE,EAAE;AACrB,IAAI,cAAc,EAAE,EAAE;AACtB,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,aAAa,EAAE,OAAO;AAC1B,EAAE;AACF;AACA,MAAM,WAAW,CAAC;AAClB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;AACxB,QAAQ,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AACvB,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACzB,KAAK;AACL,IAAI,IAAI,GAAG;AACX,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACtC,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE;AAC/B,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvC,YAAY,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AACrD,SAAS;AACT,KAAK;AACL,IAAI,IAAI,GAAG;AACX,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AACxC,QAAQ,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE;AAC/B,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,YAAY,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AACrD,SAAS;AACT,KAAK;AACL,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACvB,YAAY,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;AAC7B,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;AAC9D,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7G,QAAQ,IAAI,CAAC,cAAc,IAAI,CAAC,kBAAkB,EAAE;AACpD,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,IAAI,cAAc,EAAE;AAC5B,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,YAAY,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AAC7B,SAAS;AACT,QAAQ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;AACzB,KAAK;AACL,IAAI,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE;AACpC,QAAQ,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;AACzB,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,KAAK;AACL,CAAC;AACD;AACA,SAAS,qBAAqB,CAAC,WAAW,EAAE,GAAG,MAAM,EAAE;AACvD,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AACD,SAAS,qBAAqB,CAAC,WAAW,EAAE,GAAG,MAAM,EAAE;AACvD,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,KAAK,KAAK,WAAW,CAAC,KAAK;AAC7E,QAAQ,SAAS,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;AACjD,QAAQ,SAAS,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AACD;AACA,SAAS,kBAAkB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;AACvE,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AACjC,IAAI,MAAM,YAAY,GAAG,OAAO,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC;AACxF,IAAI,OAAO;AACX,QAAQ,KAAK;AACb,QAAQ,SAAS,EAAE,YAAY,KAAK,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;AAChG,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAChC,IAAI,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC;AACpC,CAAC;AACD;AACA,SAAS,yBAAyB,CAAC,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAE,mBAAmB,EAAE;AAChG,IAAI,IAAI,sBAAsB,GAAG,EAAE,CAAC;AACpC,IAAI,KAAK,IAAI,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClE,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,MAAM,kBAAkB,GAAG,CAAC,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC;AAC/J,QAAQ,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;AAC7C,aAAa,cAAc,KAAK,YAAY,IAAI,CAAC,kBAAkB,CAAC,EAAE;AACtE,YAAY,OAAO,sBAAsB,CAAC;AAC1C,SAAS;AACT,QAAQ,sBAAsB,IAAI,cAAc,CAAC;AACjD,KAAK;AACL,IAAI,OAAO,sBAAsB,CAAC;AAClC,CAAC;AACD;AACA,SAAS,qBAAqB,CAAC,KAAK,EAAE,cAAc,EAAE;AACtD,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;AACvC,QAAQ,QAAQ,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM;AACtD,YAAY,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK;AACjD,gBAAgB,MAAM,cAAc,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AACzD,gBAAgB,OAAO,gBAAgB,CAAC,cAAc,CAAC;AACvD,sBAAsB,IAAI,KAAK,cAAc;AAC7C,sBAAsB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACjD,aAAa,CAAC,EAAE;AAChB,KAAK;AACL,IAAI,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC;AACD;AACA,SAAS,wBAAwB,CAAC,YAAY,EAAE,IAAI,EAAE,mBAAmB,EAAE;AAC3E,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC;AAC1B,IAAI,IAAI,QAAQ,GAAG,IAAI,CAAC;AACxB,IAAI,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,mBAAmB,EAAE,IAAI,EAAE,SAAS,KAAK;AACxG,QAAQ,MAAM,iBAAiB,GAAG,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;AAClH,QAAQ,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAC1E,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC9D,QAAQ,IAAI,gBAAgB,CAAC,cAAc,CAAC,EAAE;AAC9C,YAAY,OAAO,iBAAiB,GAAG,cAAc,CAAC;AACtD,SAAS;AACT,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;AACzC,YAAY,OAAO,iBAAiB,CAAC;AACrC,SAAS;AACT,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;AAC3E,YAAY,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAClD,SAAS;AACT,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;AACzE,YAAY,QAAQ,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAChD,SAAS;AACT,QAAQ,OAAO,iBAAiB,GAAG,IAAI,CAAC;AACxC,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,MAAM,uBAAuB,GAAG,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAC;AAC1G,IAAI,OAAO;AACX,QAAQ,KAAK,EAAE,qBAAqB,CAAC,WAAW,GAAG,uBAAuB,EAAE,IAAI,CAAC;AACjF,cAAc,WAAW,GAAG,uBAAuB;AACnD,cAAc,WAAW;AACzB,QAAQ,SAAS,EAAE,CAAC,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,GAAG,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC;AAC7K,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,uBAAuB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE;AACnE,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AACjC,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC;AACvB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;AACnB,IAAI,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,KAAK;AACrF,QAAQ,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,IAAI,CAAC;AAC3D,QAAQ,IAAI,IAAI,KAAK,CAAC,EAAE;AACxB,YAAY,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC;AAChD,SAAS;AACT,QAAQ,IAAI,EAAE,KAAK,CAAC,EAAE;AACtB,YAAY,KAAK,GAAG,kBAAkB,CAAC,MAAM,CAAC;AAC9C,SAAS;AACT,QAAQ,OAAO,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,gBAAgB,GAAG,kBAAkB,CAAC;AAC1F,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;AAClE,CAAC;AACD;AACA,SAAS,oBAAoB,CAAC,YAAY,EAAE,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAAE;AAC9E,IAAI,IAAI,qBAAqB,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AACzD,QAAQ,OAAO,YAAY,CAAC;AAC5B,KAAK;AACL,IAAI,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACpD,UAAU,wBAAwB,CAAC,YAAY,EAAE,IAAI,EAAE,mBAAmB,CAAC;AAC3E,UAAU,uBAAuB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACtD,IAAI,OAAO;AACX,QAAQ,SAAS;AACjB,QAAQ,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK;AACxE,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,yBAAyB,CAAC,mBAAmB,EAAE,IAAI,EAAE;AAC9D,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC9B,QAAQ,OAAO,mBAAmB,CAAC;AACnC,KAAK;AACL,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC;AACrD,IAAI,MAAM,SAAS,GAAG,EAAE,CAAC;AACzB,IAAI,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK;AAC9F,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE;AACxB,YAAY,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5C,SAAS;AACT,QAAQ,IAAI,CAAC,KAAK,EAAE,EAAE;AACtB,YAAY,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5C,SAAS;AACT,QAAQ,OAAO,gBAAgB,CAAC,cAAc,CAAC,IAAI,cAAc,KAAK,IAAI;AAC1E,cAAc,QAAQ;AACtB,cAAc,QAAQ,GAAG,IAAI,CAAC;AAC9B,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,QAAQ,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;AACtF,KAAK;AACL,IAAI,OAAO;AACX,QAAQ,KAAK,EAAE,aAAa;AAC5B,QAAQ,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/C,KAAK,CAAC;AACN,CAAC;AACD;AACA,MAAM,SAAS,CAAC;AAChB,IAAI,WAAW,CAAC,mBAAmB,EAAE,WAAW,EAAE;AAClD,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;AACvD,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AACvC,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;AACxB,QAAQ,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACtI,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AACnC,KAAK;AACL,IAAI,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE;AAC7C,QAAQ,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AAC/B,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACtD,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AACzE,YAAY,SAAS,EAAE,CAAC,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;AACjF,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,mBAAmB,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACrE,QAAQ,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AACpG,QAAQ,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,kBAAkB,CAAC,oBAAoB,EAAE,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC;AAC7I,QAAQ,MAAM,2BAA2B,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,aAAa,CAAC;AAC9G,QAAQ,MAAM,aAAa,GAAG,2BAA2B,CAAC,MAAM,CAAC;AACjE,QAAQ,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACxD,YAAY,KAAK,EAAE,2BAA2B;AAC9C,gBAAgB,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC;AAC5D,YAAY,SAAS,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;AACrD,SAAS,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;AAChD,QAAQ,MAAM,uBAAuB;AACrC;AACA,QAAQ,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;AACpC,YAAY,oBAAoB,CAAC;AACjC,gBAAgB,KAAK,EAAE,2BAA2B;AAClD,gBAAgB,SAAS,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC;AACzD,aAAa,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC;AAC1D,QAAQ,IAAI,uBAAuB;AACnC,YAAY,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,CAAC;AAC3D,UAAU;AACV,YAAY,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;AAClD,SAAS;AACT,QAAQ,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC;AAC9C,QAAQ,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;AACtD,KAAK;AACL,IAAI,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;AACjC,QAAQ,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;AAChC,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AAC/B,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACtD,YAAY,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AACzD,YAAY,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACnC,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,mBAAmB,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACrE,QAAQ,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AACpG,QAAQ,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC;AAC1E,QAAQ,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC;AAClF,YAAY,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACzD,QAAQ,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;AACnK,QAAQ,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC;AAC9C,QAAQ,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC,SAAS,CAAC;AACtD,KAAK;AACL,IAAI,iBAAiB,CAAC,YAAY,EAAE;AACpC,QAAQ,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;AAC1C,QAAQ,OAAO,OAAO,IAAI,KAAK,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;AACtE,KAAK;AACL,CAAC;AACD;AACA,MAAM,aAAa,CAAC;AACpB,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AAC5B,KAAK;AACL,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE;AACnC,QAAQ,MAAM,SAAS,GAAG,EAAE,CAAC;AAC7B,QAAQ,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACrE,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAC1F,KAAK;AACL,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC,CAAC;AAC3D,KAAK;AACL,CAAC;AACD;AACA,MAAM,cAAc,GAAG;AACvB,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC;AAChB,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;AACf,IAAI,KAAK,EAAE,CAAC,IAAI,CAAC;AACjB,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC;AAChB,CAAC,CAAC;AACF;AACA,MAAM,UAAU,GAAG;AACnB,IAAI,CAAC,EAAE,EAAE;AACT,IAAI,CAAC,EAAE,EAAE;AACT,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE;AAChD,IAAI,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC;AACjE,QAAQ,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC;AAC3D,QAAQ,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC;AAC/D,QAAQ,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA,QAAQ,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE;AACtC,CAAC;AACD;AACA,SAAS,MAAM,CAAC,KAAK,EAAE;AACvB,IAAI,QAAQ,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9D,QAAQ,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AACjF,QAAQ,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;AACjF,MAAM;AACN,CAAC;AACD,SAAS,MAAM,CAAC,KAAK,EAAE;AACvB,IAAI,QAAQ,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9D,QAAQ,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;AAC1D,MAAM;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,EAAE;AAC5D,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;AACvC,IAAI,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE;AACjD,QAAQ,OAAO,CAAC,KAAK,GAAG,mBAAmB,CAAC;AAC5C,KAAK;AACL,SAAS;AACT,QAAQ,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC;AACzD,QAAQ,OAAO,CAAC,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC;AAClD,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACvC,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC7G,SAAS;AACT,KAAK;AACL,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,YAAY,EAAE;AACxC,QAAQ,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5B,KAAK;AACL,CAAC;AACD;AACA,SAAS,gBAAgB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE;AAC3D,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AACjC,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;AACrB,QAAQ,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1B,KAAK;AACL,IAAI,MAAM,YAAY,GAAG,SAAS;AAClC,UAAU,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM;AAC7D,UAAU,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,IAAI,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,GAAG,YAAY,CAAC;AACvD,IAAI,MAAM,QAAQ,GAAG,SAAS,GAAG,YAAY,GAAG,EAAE,CAAC;AACnD,IAAI,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AACD;AACA,SAAS,oBAAoB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE;AAC/D,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AACjC,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;AACrB,QAAQ,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1B,KAAK;AACL,IAAI,MAAM,iBAAiB,GAAG,SAAS,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,IAAI,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9E,CAAC;AACD;AACA,MAAM,mBAAmB,GAAG,OAAO,CAAC;AACpC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AACnC,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,SAAS,gBAAgB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE;AAC3D,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AACjC,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;AACrB,QAAQ,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1B,KAAK;AACL,IAAI,IAAI,SAAS,EAAE;AACnB,QAAQ,MAAM,wBAAwB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC3D,QAAQ,MAAM,CAAC,aAAa,CAAC,GAAG,wBAAwB,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI;AACtF,YAAY,EAAE;AACd,SAAS,CAAC;AACV,QAAQ,MAAM,mBAAmB,GAAG,wBAAwB;AAC5D,aAAa,SAAS,EAAE;AACxB,aAAa,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/B,QAAQ,OAAO;AACf,YAAY,IAAI;AAChB,YAAY,mBAAmB,KAAK,CAAC,CAAC;AACtC,kBAAkB,IAAI,GAAG,aAAa,CAAC,MAAM,GAAG,mBAAmB;AACnE,kBAAkB,KAAK,CAAC,MAAM;AAC9B,SAAS,CAAC;AACV,KAAK;AACL,IAAI,MAAM,uBAAuB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACvD,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,uBAAuB,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxF,IAAI,MAAM,kBAAkB,GAAG,uBAAuB;AACtD,SAAS,OAAO,EAAE;AAClB,SAAS,KAAK,CAAC,EAAE,CAAC;AAClB,SAAS,OAAO,EAAE;AAClB,SAAS,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAClD,IAAI,OAAO;AACX,QAAQ,kBAAkB,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,MAAM,GAAG,kBAAkB,GAAG,CAAC;AACvF,QAAQ,EAAE;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,UAAU,GAAG,EAAE,EAAE;AACtC,IAAI,OAAO,CAAC,WAAW,EAAE,GAAG,YAAY,KAAK,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AAC/J,CAAC;AACD;AACA,SAAS,gBAAgB,CAAC,YAAY,EAAE,cAAc,EAAE;AACxD,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,uBAAuB,CAAC,EAAE,cAAc,CAAC,CAAC;AAC9F,IAAI,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAC5D,IAAI,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AAC9D,IAAI,MAAM,mBAAmB,GAAG,OAAO,YAAY,KAAK,QAAQ;AAChE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;AACpD,UAAU,YAAY,CAAC;AACvB,IAAI,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;AACzG,IAAI,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC3D,IAAI,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAC/E,IAAI,OAAO,OAAO,YAAY,KAAK,QAAQ,GAAG,KAAK,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AAC3E,CAAC;AAqCD;AACA,MAAM,OAAO,SAAS,WAAW,CAAC;AAClC,IAAI,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE;AACzC,QAAQ,KAAK,EAAE,CAAC;AAChB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC/B,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AAC7C,QAAQ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,UAAU,CAAC;AAC/D,QAAQ,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7D,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,uBAAuB,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACtG,QAAQ,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACpE,QAAQ,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACtE,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAChG,QAAQ,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC9C,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,IAAI;AACtD,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;AAC/B,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvC,gBAAgB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACnC,aAAa;AACb,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;AAC/B,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvC,gBAAgB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACnC,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,IAAI;AAC1D,YAAY,IAAI,EAAE,CAAC;AACnB,YAAY,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAClE,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClD,YAAY,QAAQ,KAAK,CAAC,SAAS;AACnC;AACA,gBAAgB,KAAK,aAAa;AAClC,oBAAoB,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3C,oBAAoB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACvC,gBAAgB,KAAK,aAAa;AAClC,oBAAoB,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3C,oBAAoB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACvC,gBAAgB,KAAK,aAAa,CAAC;AACnC,gBAAgB,KAAK,uBAAuB,CAAC;AAC7C,gBAAgB,KAAK,sBAAsB;AAC3C,oBAAoB,OAAO,IAAI,CAAC,YAAY,CAAC;AAC7C,wBAAwB,KAAK;AAC7B,wBAAwB,SAAS;AACjC,wBAAwB,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;AACrF,qBAAqB,CAAC,CAAC;AACvB,gBAAgB,KAAK,mBAAmB,CAAC;AACzC,gBAAgB,KAAK,oBAAoB;AACzC,oBAAoB,OAAO,IAAI,CAAC,YAAY,CAAC;AAC7C,wBAAwB,KAAK;AAC7B,wBAAwB,SAAS;AACjC,wBAAwB,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;AACjF,wBAAwB,KAAK,EAAE,IAAI;AACnC,qBAAqB,CAAC,CAAC;AACvB,gBAAgB,KAAK,wBAAwB,CAAC;AAC9C,gBAAgB,KAAK,uBAAuB,CAAC;AAC7C,gBAAgB,KAAK,wBAAwB,CAAC;AAC9C,gBAAgB,KAAK,uBAAuB;AAC5C,oBAAoB,OAAO,IAAI,CAAC,YAAY,CAAC;AAC7C,wBAAwB,KAAK;AAC7B,wBAAwB,SAAS;AACjC,wBAAwB,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;AACjF,wBAAwB,KAAK,EAAE,IAAI;AACnC,qBAAqB,CAAC,CAAC;AACvB,gBAAgB,KAAK,uBAAuB;AAC5C,oBAAoB,OAAO;AAC3B,gBAAgB,KAAK,iBAAiB,CAAC;AACvC,gBAAgB,KAAK,iBAAiB;AACtC,oBAAoB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnD,gBAAgB,KAAK,iBAAiB,CAAC;AACvC,gBAAgB,KAAK,YAAY,CAAC;AAClC,gBAAgB,KAAK,gBAAgB,CAAC;AACtC,gBAAgB;AAChB,oBAAoB,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI;AAC9D;AACA;AACA,wBAAwB,CAAC,EAAE,GAAG,KAAK,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AAChH,wBAAwB,EAAE,CAAC,CAAC;AAC5B,aAAa;AACb,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK;AAC9D,YAAY,IAAI,SAAS,KAAK,uBAAuB,EAAE;AACvD,gBAAgB,OAAO;AACvB,aAAa;AACb,YAAY,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACvC,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClD,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM;AAC1D,YAAY,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACvC,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClD,SAAS,CAAC,CAAC;AACX,KAAK;AACL,IAAI,IAAI,YAAY,GAAG;AACvB,QAAQ,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACrE,QAAQ,OAAO;AACf,YAAY,KAAK;AACjB,YAAY,SAAS,EAAE,CAAC,cAAc,IAAI,CAAC,EAAE,YAAY,IAAI,CAAC,CAAC;AAC/D,SAAS,CAAC;AACV,KAAK;AACL,IAAI,IAAI,SAAS,GAAG;AACpB,QAAQ,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3C,QAAQ,OAAO,SAAS,KAAK,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,CAAC;AACvD,KAAK;AACL,IAAI,OAAO,GAAG;AACd,QAAQ,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACrC,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;AAC3G,KAAK;AACL,IAAI,kBAAkB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG;AACzD,QAAQ,SAAS,EAAE,YAAY;AAC/B,QAAQ,IAAI,EAAE,IAAI;AAClB,KAAK,EAAE;AACP,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACrD,QAAQ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAChC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAQ,IAAI,YAAY,KAAK,KAAK,EAAE;AACpC,YAAY,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;AAC/C,SAAS;AACT,KAAK;AACL,IAAI,oBAAoB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE;AACrC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;AACjC,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;AACrC,aAAa,OAAO,CAAC,cAAc,KAAK,IAAI,IAAI,OAAO,CAAC,YAAY,KAAK,EAAE,CAAC,EAAE;AAC9E,YAAY,CAAC,EAAE,GAAG,OAAO,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC7G,SAAS;AACT,KAAK;AACL,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AACnC,KAAK;AACL,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACnF,KAAK;AACL,IAAI,kBAAkB,CAAC,SAAS,GAAG;AACnC,QAAQ,SAAS,EAAE,YAAY;AAC/B,QAAQ,IAAI,EAAE,IAAI;AAClB,KAAK,EAAE;AACP,QAAQ,IAAI,UAAU,CAAC,UAAU,EAAE;AACnC,YAAY,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACnJ,SAAS;AACT,KAAK;AACL,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,GAAG,KAAK,GAAG,EAAE;AAClE,QAAQ,MAAM,YAAY,GAAG;AAC7B,YAAY,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK;AAC1C,YAAY,SAAS;AACrB,SAAS,CAAC;AACV,QAAQ,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC;AAChE,QAAQ,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;AACnD,YAAY,YAAY,EAAE,YAAY;AACtC,YAAY,IAAI,EAAE,EAAE;AACpB,SAAS,EAAE,SAAS,GAAG,eAAe,GAAG,gBAAgB,CAAC,CAAC;AAC3D,QAAQ,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACpE,QAAQ,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC;AAClD,QAAQ,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAC5E,QAAQ,MAAM,gBAAgB,GAAG,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC;AACzE,YAAY,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAChD,QAAQ,IAAI,gBAAgB,KAAK,eAAe,CAAC,KAAK;AACtD,YAAY,CAAC,KAAK;AAClB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;AAC7C,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,KAAK,CAAC,cAAc,EAAE,CAAC;AAC/B,QAAQ,IAAI,qBAAqB,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE;AAC3F;AACA,YAAY,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAClF,SAAS;AACT,QAAQ,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE;AACjD,YAAY,SAAS,EAAE,KAAK,CAAC,SAAS;AACtC,YAAY,IAAI,EAAE,IAAI;AACtB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AAC5C,KAAK;AACL,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;AAC9B,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;AACtD,QAAQ,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;AAC9E,YAAY,IAAI;AAChB,YAAY,YAAY,EAAE,mBAAmB;AAC7C,SAAS,EAAE,QAAQ,CAAC,CAAC;AACrB,QAAQ,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACpE,QAAQ,IAAI;AACZ,YAAY,SAAS,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAC1E,SAAS;AACT,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1C,SAAS;AACT,QAAQ,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC;AAClD,QAAQ,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;AACzE,YAAY,IAAI;AAChB,YAAY,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAChD,QAAQ,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AACnF,QAAQ,IAAI,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;AAC3D,YAAY,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC;AAC1C,SAAS;AACT,QAAQ,IAAI,gBAAgB,KAAK,eAAe,CAAC,KAAK;AACtD,YAAY,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;AAC5C,YAAY,KAAK,CAAC,cAAc,EAAE,CAAC;AACnC,YAAY,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE;AACrD,gBAAgB,IAAI;AACpB,gBAAgB,SAAS,EAAE,KAAK,CAAC,SAAS;AAC1C,aAAa,CAAC,CAAC;AACf,YAAY,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;AAChD,SAAS;AACT,KAAK;AACL,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;AAC/D,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3C,SAAS;AACT,KAAK;AACL;;ACjuBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;AAChC,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrF,IAAI,QAAQ,KAAK,YAAY,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,YAAY,EAAE;AAC3E,CAAC;AACD;AACA,SAAS,WAAW,CAAC,GAAG,EAAE;AAC1B,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AAC5C,CAAC;AACD;AACA,SAAS,UAAU,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;AAC5D,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;AACvC,IAAI,IAAI,GAAG,EAAE;AACb,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,CAAC;AAC3C,KAAK;AACL,IAAI,IAAI,KAAK,EAAE;AACf,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC;AAC/C,KAAK;AACL,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;AACpD,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD;AACA,MAAM,yBAAyB,GAAG,CAAC,UAAU,KAAK;AAClD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACnB,IAAI,QAAQ;AACZ,QAAQ,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC;AAChG,QAAQ,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC;AAClG,QAAQ,IAAI,EAAE,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,KAAK,CAAC;AACjG,KAAK,EAAE;AACP,CAAC,CAAC;AACF;AACA,SAAS,cAAc,CAAC,IAAI,EAAE;AAC9B,IAAI,OAAO;AACX,QAAQ,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACpD,QAAQ,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC3D,QAAQ,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACzD,QAAQ,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACvD,QAAQ,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC3D,QAAQ,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC3D,QAAQ,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AACrE,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,EAAE;AAC5D,IAAI,MAAM,YAAY,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;AACvD,IAAI,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACjG,IAAI,OAAO,YAAY,CAAC;AACxB,CAAC;AACD;AACA,SAAS,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,EAAE;AAC5D,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE;AACrD,QAAQ,OAAO,KAAK,CAAC;AACrB,KAAK;AACL,IAAI,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3E,CAAC;AACD;AACA,SAAS,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE;AAC3E,IAAI,MAAM,YAAY,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;AACvD,IAAI,QAAQ,SAAS;AACrB,SAAS,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;AACpC,SAAS,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,sBAAsB,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;AACjF,CAAC;AACD;AACA,SAAS,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE;AAC/C,IAAI,MAAM,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACzD,IAAI,MAAM,cAAc,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7D,IAAI,MAAM,YAAY,GAAG;AACzB,QAAQ,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzF,QAAQ,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC3F,QAAQ,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1F,KAAK,CAAC;AACN,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;AAC1D,SAAS,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/C,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,QAAQ,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,UAAU,CAAC;AACX,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AACf,CAAC;AACD;AACA,SAAS,cAAc,CAAC,UAAU,EAAE,UAAU,EAAE;AAChD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACnC,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC;AAC1I,IAAI,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,UAAU,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AACluB;AACA,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5E,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD;AACA,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC;AACA,SAAS,YAAY,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,GAAG,EAAE,EAAE,QAAQ,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,QAAQ,GAAG,EAAE;AACtJ,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAC5K,IAAI,MAAM,QAAQ,GAAG,QAAQ,IAAI,QAAQ,GAAG,iBAAiB,GAAG,QAAQ,GAAG,EAAE,CAAC,CAAC;AAC/E,IAAI,OAAO,QAAQ;AACnB,SAAS,UAAU,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;AACrE,SAAS,UAAU,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;AAC3E,SAAS,UAAU,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC;AACpF,SAAS,UAAU,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;AAC3E,SAAS,UAAU,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,KAAK,CAAC,GAAG,YAAY,GAAG,EAAE,CAAC;AAChG,SAAS,UAAU,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AACjF,SAAS,UAAU,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;AACjF,SAAS,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;AAChC,SAAS,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACjC,CAAC;AACD;AACA,MAAM,wBAAwB,GAAG;AACjC,IAAI,GAAG,EAAE,EAAE;AACX,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,IAAI,EAAE,IAAI;AACd,CAAC,CAAC;AAGF;AACA,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AAChD,MAAM,gBAAgB,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AAChD;AACA,MAAM,+BAA+B,GAAG;AACxC,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,YAAY,EAAE,GAAG;AACrB,CAAC,CAAC;AACF;AACA,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACzC;AACA,MAAM,0BAA0B,GAAG;AACnC,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,OAAO,EAAE,CAAC;AACd,IAAI,OAAO,EAAE,CAAC;AACd,IAAI,YAAY,EAAE,CAAC;AACnB,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA,MAAM,mBAAmB,GAAG,QAAQ,CAAC;AAKrC;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,QAAQ,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,QAAQ,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,WAAW,GAAG,QAAQ,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B;AACA;AACA;AACA;AACA,MAAM,cAAc,GAAG,QAAQ,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG,QAAQ,CAAC;AAC5B;AACA;AACA;AACA;AACA,MAAM,aAAa,GAAG,QAAQ,CAAC;AAC/B;AACA,SAAS,kBAAkB,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE;AAC9F,IAAI,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AACrE,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACpD,IAAI,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACrC,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,YAAY,EAAE;AAC5D,QAAQ,MAAM,aAAa,GAAG,YAAY,CAAC,qBAAqB,EAAE;AAClE,YAAY,QAAQ,EAAE,gBAAgB;AACtC,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,eAAe,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;AACtE,QAAQ,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;AAC1D,QAAQ,MAAM,qBAAqB,GAAG,MAAM;AAC5C,YAAY,aAAa,CAAC,MAAM;AAChC,YAAY,eAAe;AAC3B,YAAY,yBAAyB,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC;AACrE,QAAQ,MAAM,uBAAuB,GAAG,qBAAqB,IAAI,IAAI,IAAI,qBAAqB,KAAK,EAAE,CAAC;AACtG,QAAQ,IAAI,uBAAuB,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE;AACvF;AACA,YAAY,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7E,SAAS;AACT,QAAQ,IAAI,uBAAuB,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE;AACjE;AACA,YAAY,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AAC7E,SAAS;AACT,QAAQ,qBAAqB,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;AAC1D,KAAK;AACL,IAAI,MAAM,mBAAmB,GAAG,YAAY,CAAC,qBAAqB,EAAE;AACpE,QAAQ,QAAQ,EAAE,gBAAgB;AAClC,KAAK,CAAC,CAAC;AACP,IAAI,MAAM,0BAA0B,GAAG,mBAAmB,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;AACtF,IAAI,OAAO;AACX,QAAQ,mBAAmB;AAC3B,QAAQ,gBAAgB,EAAE;AAC1B,YAAY,IAAI,GAAG,0BAA0B;AAC7C,YAAY,EAAE,GAAG,0BAA0B;AAC3C,SAAS;AACT,KAAK,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAC3C,MAAM,eAAe,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACxD,SAAS,YAAY,CAAC,GAAG,EAAE;AAC3B,IAAI,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC;AACzF,CAAC;AAsBD;AACA,SAAS,QAAQ,CAAC,CAAC,EAAE;AACrB,IAAI,OAAO,CAAC,CAAC;AACb,CAAC;AACD;AACA,SAAS,OAAO,CAAC,MAAM,EAAE;AACzB,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;AACvF,CAAC;AACD;AACA,SAAS,uBAAuB,CAAC,YAAY,EAAE,cAAc,EAAE,mBAAmB,GAAG,CAAC,EAAE;AACxF,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE;AAC3F,QAAQ,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAC5E,KAAK;AACL,IAAI,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACpC;AACA,QAAQ,OAAO,uBAAuB,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,mBAAmB,GAAG,CAAC,CAAC,CAAC;AACxI,KAAK;AACL;AACA,IAAI,OAAO,uBAAuB,CAAC,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;AAChI,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,cAAc,EAAE;AAC1C,IAAI,OAAO,cAAc,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AACjF,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,eAAe,EAAE;AAC5C,IAAI,OAAO,eAAe,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACpG,CAAC;AACD;AACA;AACA;AACA;AACA,SAAS,8BAA8B,GAAG;AAC1C,IAAI,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK;AACvC,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;AAClD,QAAQ,OAAO;AACf,YAAY,YAAY,EAAE;AAC1B,gBAAgB,SAAS;AACzB,gBAAgB,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC;AAC9C,aAAa;AACb,YAAY,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC;AACxC,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,0CAA0C,CAAC,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE;AACnH,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK;AACrC,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AACrC,QAAQ,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9D,QAAQ,MAAM,oBAAoB,GAAG,EAAE,CAAC;AACxC,QAAQ,IAAI,UAAU,GAAG,CAAC,CAAC;AAC3B,QAAQ,WAAW,CAAC,OAAO,CAAC,UAAU,IAAI;AAC1C,YAAY,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAC7E,YAAY,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC5D,YAAY,MAAM,qBAAqB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK;AACpG,gBAAgB,MAAM,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,GAAG,uBAAuB,CAAC,YAAY,EAAE,CAAC,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACzJ,gBAAgB,UAAU,IAAI,mBAAmB,CAAC;AAClD,gBAAgB,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,WAAW,GAAG,qBAAqB,EAAE,CAAC,CAAC;AACvG,aAAa,EAAE,EAAE,CAAC,CAAC;AACnB,YAAY,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAC3G,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,cAAc,GAAG,OAAO,CAAC,oBAAoB,EAAE,KAAK,CAAC;AACnE,aAAa,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;AAC/H,kBAAkB,oBAAoB;AACtC,kBAAkB,EAAE,CAAC;AACrB,YAAY,QAAQ,CAAC;AACrB,QAAQ,IAAI,UAAU,IAAI,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,oBAAoB,EAAE;AAC3E;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU,EAAE,CAAC;AACzB,SAAS;AACT,QAAQ,OAAO;AACf,YAAY,SAAS,EAAE,CAAC,IAAI,GAAG,UAAU,EAAE,EAAE,GAAG,UAAU,CAAC;AAC3D,YAAY,KAAK,EAAE,cAAc;AACjC,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,uCAAuC,CAAC,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,4BAA4B,GAAG,EAAE;AACnJ,IAAI,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK;AACvC,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;AAClD,QAAQ,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAChF,QAAQ,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,oBAAoB,CAAC,CAAC;AAC5I,QAAQ,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACtF,QAAQ,OAAO;AACf,YAAY,YAAY,EAAE;AAC1B,gBAAgB,SAAS;AACzB,gBAAgB,KAAK,EAAE,iBAAiB,IAAI,KAAK,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM;AACnF,sBAAsB,iBAAiB;AACvC,wBAAwB,KAAK;AAC7B,6BAA6B,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC5D,6BAA6B,OAAO,CAAC,UAAU,EAAE,qBAAqB,CAAC;AACvE,sBAAsB,KAAK;AAC3B,aAAa;AACb,YAAY,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;AACzE,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA;AACA;AACA;AACA,SAAS,sCAAsC,GAAG;AAClD,IAAI,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK;AACvC,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;AAClD,QAAQ,OAAO;AACf,YAAY,YAAY,EAAE;AAC1B,gBAAgB,SAAS;AACzB,gBAAgB,KAAK,EAAE,iBAAiB,CAAC,KAAK,CAAC;AAC/C,aAAa;AACb,YAAY,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;AACzC,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE;AACpD,IAAI,MAAM,cAAc,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AAC/D,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AAC7E,QAAQ,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AAClD,QAAQ,OAAO;AACf,YAAY,GAAG;AACf,YAAY,KAAK,CAAC,MAAM,KAAK,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AACjE,kBAAkB,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC;AAClD,kBAAkB,KAAK;AACvB,SAAS,CAAC;AACV,KAAK,CAAC,CAAC,CAAC;AACR,CAAC;AACD;AACA,SAAS,6BAA6B,CAAC,EAAE,gBAAgB,EAAE,GAAG,GAAG,gBAAgB,EAAE,GAAG,GAAG,gBAAgB,EAAE,cAAc,GAAG,EAAE,EAAE,oBAAoB,GAAG,GAAG,GAAG,EAAE;AAC/J,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK;AACrC,QAAQ,MAAM,sBAAsB,GAAG,cAAc,IAAI,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACxF,QAAQ,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;AAC1F,QAAQ,IAAI,cAAc,GAAG,EAAE,CAAC;AAChC,QAAQ,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AAC9C,YAAY,cAAc,IAAI,cAAc,GAAG,cAAc,GAAG,EAAE,CAAC;AACnE,YAAY,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AAC7E,YAAY,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE;AACrE,gBAAgB,MAAM,SAAS,GAAG,sBAAsB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AACvF,gBAAgB,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC3F,gBAAgB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC;AACtE,sBAAsB,oBAAoB;AAC1C,sBAAsB,EAAE,CAAC;AACzB,gBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CAAC;AACpD,gBAAgB,SAAS;AACzB,aAAa;AACb,YAAY,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AACpD,YAAY,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACtD,YAAY,cAAc,IAAI,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AACxE,gBAAgB,QAAQ,EAAE,gBAAgB;AAC1C,aAAa,CAAC,CAAC;AACf,SAAS;AACT,QAAQ,OAAO;AACf,YAAY,SAAS;AACrB,YAAY,KAAK,EAAE,cAAc,IAAI,sBAAsB,GAAG,cAAc,GAAG,EAAE,CAAC;AAClF,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,yBAAyB,CAAC,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,GAAG,EAAE,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,EAAE;AAC/I,IAAI,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK;AACvC,QAAQ,MAAM,SAAS,GAAG,cAAc;AACxC,cAAc,IAAI,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACpD,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACtD,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;AAC9E,YAAY,gBAAgB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,EAAE;AACnE,YAAY,MAAM,OAAO,GAAG,KAAK;AACjC,iBAAiB,GAAG,CAAC,IAAI,IAAI,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;AAChG,iBAAiB,IAAI,CAAC,cAAc,CAAC,CAAC;AACtC,YAAY,OAAO;AACnB,gBAAgB,YAAY;AAC5B,gBAAgB,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACnE,sBAAsB,iBAAiB,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE;AAChE,sBAAsB,EAAE,CAAC,CAAC;AAC1B,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AACtC,KAAK,CAAC;AACN,CAAC;AACD,SAAS,mBAAmB,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;AAC9D,IAAI,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAChE,IAAI,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACvD,IAAI,MAAM,kBAAkB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,KAAK,KAAK,KAAK,gBAAgB,CAAC,MAAM,GAAG,CAAC;AACzG,UAAU,OAAO;AACjB,UAAU,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AACjE,IAAI,OAAO,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9C,CAAC;AAsDD;AACA,SAAS,2BAA2B,CAAC,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,GAAG,EAAE,GAAG,EAAE;AACxG,IAAI,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK;AACvC,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;AAClD,QAAQ,IAAI,IAAI,KAAK,qBAAqB,EAAE;AAC5C,YAAY,OAAO;AACnB,gBAAgB,YAAY;AAC5B,gBAAgB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE;AAC/D,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,qBAAqB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;AACpI,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,YAAY,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC9C,SAAS;AACT,QAAQ,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC;AACxC,QAAQ,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AACrC,QAAQ,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxF,QAAQ,MAAM,WAAW,GAAG,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;AACrG,QAAQ,IAAI,cAAc,GAAG,EAAE,CAAC;AAChC,QAAQ,MAAM,iBAAiB,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACvG,QAAQ,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;AAC9C,YAAY,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,GAAG,kBAAkB,CAAC;AACjF,gBAAgB,UAAU;AAC1B,gBAAgB,gBAAgB;AAChC,gBAAgB,MAAM,EAAE,cAAc,CAAC,MAAM;AAC7C,gBAAgB,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AACrC,aAAa,CAAC,CAAC;AACf,YAAY,IAAI,UAAU,IAAI,CAAC,mBAAmB,EAAE;AACpD,gBAAgB,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAClD,aAAa;AACb,YAAY,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACrC,YAAY,cAAc;AAC1B,gBAAgB,iBAAiB,IAAI,CAAC,cAAc;AACpD,sBAAsB,mBAAmB,GAAG,cAAc;AAC1D,sBAAsB,mBAAmB,CAAC;AAC1C,SAAS;AACT,QAAQ,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACvD,QAAQ,OAAO;AACf,YAAY,YAAY,EAAE;AAC1B,gBAAgB,SAAS;AACzB,gBAAgB,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;AACpD,oBAAoB,OAAO;AAC3B,yBAAyB,KAAK,CAAC,qBAAqB,CAAC;AACrD,yBAAyB,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnE,yBAAyB,IAAI,CAAC,qBAAqB,CAAC;AACpD,oBAAoB,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5C,aAAa;AACb,YAAY,IAAI,EAAE,OAAO;AACzB,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AA0ED;AACA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC;AACvB,SAAS,gCAAgC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,GAAG,EAAE;AACrF,IAAI,MAAM,eAAe,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AAChE,IAAI,OAAO,IAAI,IAAI,CAAC;AACpB,UAAU,IAAI;AACd,UAAU,OAAO,IAAI;AACrB,YAAY,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK;AACxC,gBAAgB,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;AAC1E,oBAAoB,OAAO;AAC3B,iBAAiB;AACjB,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvC,gBAAgB,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC,CAAC;AACnE,gBAAgB,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvD,oBAAoB,eAAe;AACnC,oBAAoB,cAAc;AAClC,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,IAAI,CAAC,aAAa,EAAE;AACpC,oBAAoB,OAAO;AAC3B,iBAAiB;AACjB,gBAAgB,MAAM,YAAY,GAAG,kBAAkB,CAAC;AACxD,oBAAoB,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC;AACjE,oBAAoB,KAAK,EAAE,OAAO,CAAC,KAAK;AACxC,oBAAoB,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI;AACjE,oBAAoB,GAAG,EAAE,oBAAoB,CAAC,aAAa,CAAC;AAC5D,iBAAiB,CAAC,CAAC;AACnB,gBAAgB,oBAAoB,CAAC,OAAO,EAAE;AAC9C,oBAAoB,KAAK,EAAE,YAAY;AACvC,oBAAoB,SAAS,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;AAC/D,iBAAiB,CAAC,CAAC;AACnB,aAAa,CAAC;AACd,YAAY,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1D,YAAY,OAAO,MAAM,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC1E,SAAS,CAAC;AACV,CAAC;AACD,SAAS,yBAAyB,CAAC,QAAQ,EAAE;AAC7C,IAAI,OAAO,IAAI,GAAG,CAAC;AACnB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAClD,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpD,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpD,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC1D,KAAK,CAAC,CAAC;AACP,CAAC;AACD,SAAS,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE;AACxC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACxC,IAAI,OAAO,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC;AACD,SAAS,gBAAgB,CAAC,EAAE,eAAe,EAAE,cAAc,GAAG,EAAE;AAChE,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE;AACzE,QAAQ,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC;AACxC,QAAQ,IAAI,IAAI,IAAI,cAAc,IAAI,cAAc,IAAI,EAAE,EAAE;AAC5D,YAAY,OAAO,WAAW,CAAC;AAC/B,SAAS;AACT,KAAK;AACL,IAAI,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,EAAE;AAC/D,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AACjC,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9E,IAAI,MAAM,eAAe,GAAG,GAAG,CAAC,YAAY,GAAG,KAAK,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAC/D,IAAI,QAAQ,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;AAChC,QAAQ,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC;AACxD,QAAQ,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE;AACvC,CAAC;AACD,SAAS,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE;AACzB,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE;AACnB,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAC7D,KAAK;AACL,IAAI,OAAO,KAAK,GAAG,GAAG,CAAC;AACvB,CAAC;AA6DD;AACA,SAAS,kCAAkC,GAAG;AAC9C,IAAI,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,UAAU,KAAK;AAC7C,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;AAClD,QAAQ,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE;AACpD,YAAY,OAAO,EAAE,YAAY,EAAE,CAAC;AACpC,SAAS;AACT,QAAQ,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AACrC,QAAQ,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACpE,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACzE,QAAQ,IAAI,UAAU,KAAK,YAAY,KAAK,UAAU,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE,CAAC,EAAE;AACrF,YAAY,OAAO;AACnB,gBAAgB,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC5D,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,OAAO;AACf,YAAY,YAAY,EAAE;AAC1B,gBAAgB,SAAS,EAAE,UAAU,KAAK,gBAAgB,IAAI,UAAU,KAAK,QAAQ;AACrF,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC;AAClC,sBAAsB,CAAC,EAAE,EAAE,EAAE,CAAC;AAC9B,gBAAgB,KAAK,EAAE,QAAQ;AAC/B,aAAa;AACb,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD,SAAS,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;AACpC,IAAI,OAAO,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC;AAC/B,CAAC;AACD;AACA,SAAS,2BAA2B,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE;AAC3E,IAAI,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7D,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE;AAClM,YAAY,sCAAsC,EAAE;AACpD,YAAY,kCAAkC,EAAE;AAChD,YAAY,yBAAyB,CAAC;AACtC,gBAAgB,gBAAgB;AAChC,gBAAgB,qBAAqB,EAAE,SAAS;AAChD,aAAa,CAAC;AACd,YAAY,2BAA2B,CAAC;AACxC,gBAAgB,gBAAgB;AAChC,gBAAgB,qBAAqB,EAAE,SAAS;AAChD,aAAa,CAAC;AACd,SAAS,EAAE,cAAc,EAAE;AAC3B,YAAY,0CAA0C,CAAC;AACvD,gBAAgB,gBAAgB;AAChC,gBAAgB,oBAAoB,EAAE,SAAS;AAC/C,gBAAgB,OAAO,EAAE,KAAK,KAAK,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5D,gBAAgB,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,UAAU;AACrD,aAAa,CAAC;AACd,YAAY,6BAA6B,CAAC;AAC1C,gBAAgB,GAAG;AACnB,gBAAgB,GAAG;AACnB,gBAAgB,gBAAgB;AAChC,gBAAgB,oBAAoB,EAAE,SAAS;AAC/C,aAAa,CAAC;AACd,SAAS,EAAE,CAAC,CAAC;AACb,CAAC;AACD;AACA,MAAM,6BAA6B,GAAG;AACtC,IAAI,WAAW;AACf,IAAI,YAAY;AAChB,IAAI,YAAY;AAChB,IAAI,UAAU;AACd,IAAI,cAAc;AAClB,CAAC,CAAC;AACF;AACA,SAAS,oCAAoC,CAAC,EAAE,gBAAgB,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,GAAG,gBAAgB,GAAG,EAAE;AACnI,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AAClD,QAAQ,OAAO,QAAQ,CAAC;AACxB,KAAK;AACL,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK;AACrC,QAAQ,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;AAC1F,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;AACpC,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAAE;AACrF,YAAY,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACxC,SAAS;AACT,QAAQ,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,IAAI,cAAc,CAAC,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAChI,QAAQ,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE;AAClG;AACA;AACA,YAAY,GAAG,EAAE,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChH,QAAQ,MAAM,gBAAgB,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AACpD,cAAc,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;AACpL,cAAc,GAAG,CAAC;AAClB,QAAQ,MAAM,sBAAsB,GAAG,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;AAC5E,QAAQ,MAAM,yBAAyB,GAAG,sBAAsB,GAAG,gBAAgB;AACnF,cAAc,gBAAgB;AAC9B,cAAc,sBAAsB,CAAC;AACrC,QAAQ,OAAO;AACf,YAAY,SAAS;AACrB,YAAY,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;AACjC,gBAAgB,cAAc;AAC9B,gBAAgB,YAAY,CAAC,cAAc,CAAC,yBAAyB,CAAC,EAAE;AACxE,oBAAoB,QAAQ,EAAE,gBAAgB;AAC9C,iBAAiB,CAAC;AAClB,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,4BAA4B,CAAC,EAAE,gBAAgB,EAAE,cAAc,GAAG,EAAE;AAC7E,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK;AACrC,QAAQ,MAAM,WAAW,GAAG,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;AAC1F,QAAQ,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC;AAC5D,YAAY,WAAW,CAAC,KAAK,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACpF,QAAQ,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;AACrC,QAAQ,MAAM,aAAa,GAAG,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;AACnD,QAAQ,MAAM,gBAAgB,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC;AAClE,QAAQ,IAAI,EAAE,aAAa,IAAI,gBAAgB,CAAC,IAAI,CAAC,mBAAmB,EAAE;AAC1E,YAAY,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACxC,SAAS;AACT,QAAQ,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,IAAI,cAAc,CAAC,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAChI,QAAQ,OAAO;AACf,YAAY,SAAS;AACrB,YAAY,KAAK,EAAE,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK;AACzF,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,gCAAgC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,GAAG,GAAG,EAAE,cAAc,GAAG,CAAC,EAAE,mBAAmB,CAAC,EAAE,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAAC,GAAG,EAAE;AAC1L,IAAI,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACjE,IAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACpG,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE;AACjL,YAAY,sCAAsC,EAAE;AACpD,YAAY,uCAAuC,CAAC;AACpD,gBAAgB,gBAAgB;AAChC,gBAAgB,oBAAoB,EAAE,aAAa;AACnD,gBAAgB,qBAAqB,EAAE,cAAc;AACrD,gBAAgB,4BAA4B,EAAE,6BAA6B;AAC3E,aAAa,CAAC;AACd,YAAY,kCAAkC,EAAE;AAChD,YAAY,yBAAyB,CAAC;AACtC,gBAAgB,gBAAgB;AAChC,gBAAgB,cAAc;AAC9B,gBAAgB,qBAAqB,EAAE,aAAa;AACpD,aAAa,CAAC;AACd,YAAY,2BAA2B,CAAC;AACxC,gBAAgB,gBAAgB;AAChC,gBAAgB,cAAc;AAC9B,gBAAgB,qBAAqB,EAAE,aAAa;AACpD,aAAa,CAAC;AACd,SAAS,EAAE,cAAc,EAAE;AAC3B,YAAY,0CAA0C,CAAC;AACvD,gBAAgB,gBAAgB;AAChC,gBAAgB,oBAAoB,EAAE,aAAa;AACnD,gBAAgB,OAAO,EAAE,KAAK,KAAK;AACnC,oBAAoB,WAAW,EAAE,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,cAAc,CAAC;AAC9F,iBAAiB,CAAC;AAClB,gBAAgB,OAAO,EAAE,CAAC,oBAAoB,EAAE,YAAY,KAAK,oBAAoB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,SAAS,KAAK,GAAG;AAChI,oBAAoB,UAAU;AAC9B,qBAAqB,CAAC,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;AACxE,0BAA0B,cAAc;AACxC,0BAA0B,EAAE,CAAC,EAAE,EAAE,CAAC;AAClC,aAAa,CAAC;AACd,YAAY,6BAA6B,CAAC;AAC1C,gBAAgB,GAAG;AACnB,gBAAgB,GAAG;AACnB,gBAAgB,gBAAgB;AAChC,gBAAgB,cAAc;AAC9B,gBAAgB,oBAAoB,EAAE,aAAa;AACnD,aAAa,CAAC;AACd,YAAY,oCAAoC,CAAC;AACjD,gBAAgB,gBAAgB;AAChC,gBAAgB,SAAS;AACzB,gBAAgB,SAAS;AACzB,gBAAgB,GAAG;AACnB,gBAAgB,cAAc;AAC9B,aAAa,CAAC;AACd,YAAY,4BAA4B,CAAC;AACzC,gBAAgB,gBAAgB;AAChC,gBAAgB,cAAc;AAC9B,aAAa,CAAC;AACd,SAAS,EAAE,CAAC,CAAC;AACb,CAAC;AACD;AACA,SAAS,eAAe,CAAC,YAAY,EAAE;AACvC,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,KAAK;AAChG,QAAQ,WAAW;AACnB,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC;AAC9E,KAAK,CAAC,CAAC,CAAC;AACR,CAAC;AACD;AACA,MAAM,iBAAiB,GAAG;AAC1B,IAAI,EAAE,EAAE,OAAO;AACf,IAAI,EAAE,EAAE,SAAS;AACjB,IAAI,EAAE,EAAE,SAAS;AACjB,IAAI,GAAG,EAAE,cAAc;AACvB,CAAC,CAAC;AACF;AACA;AACA;AACA,SAAS,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE;AAC/C,IAAI,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzD,IAAI,IAAI,MAAM,GAAG,CAAC,CAAC;AACnB,IAAI,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI;AACtE,QAAQ,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AACnF,QAAQ,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC;AACrC,QAAQ,OAAO,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,CAAC;AAC9D,KAAK,CAAC,CAAC,CAAC;AACR,CAAC;AACD;AACA,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACnC,SAAS,YAAY,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE,GAAG,EAAE;AACtF,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;AAC3D,SAAS,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;AACxC,SAAS,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;AAC1C,CAAC;AACD;AACA,MAAM,mCAAmC,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjH,SAAS,kBAAkB,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,QAAQ,GAAG,EAAE;AACvG,IAAI,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC7D,IAAI,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC5D,IAAI,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACrC,IAAI,IAAI,YAAY,GAAG,CAAC,CAAC;AACzB,IAAI,KAAK,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,IAAI,oBAAoB,EAAE;AACpE,QAAQ,MAAM,aAAa,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAClE,QAAQ,MAAM,eAAe,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;AAC7D,QAAQ,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;AAC1D,QAAQ,MAAM,qBAAqB,GAAG,MAAM;AAC5C,YAAY,aAAa,CAAC,MAAM;AAChC,YAAY,eAAe;AAC3B,YAAY,0BAA0B,CAAC,WAAW,CAAC,CAAC;AACpD,QAAQ,MAAM,uBAAuB,GAAG,qBAAqB,IAAI,IAAI,IAAI,qBAAqB,IAAI,EAAE,CAAC;AACrG,QAAQ,IAAI,uBAAuB,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE;AACvF;AACA,YAAY,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,oBAAoB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;AACjF,SAAS;AACT,QAAQ,MAAM,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,GAAG,uBAAuB,CAAC,YAAY,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAC3H,QAAQ,YAAY,IAAI,mBAAmB,CAAC;AAC5C,QAAQ,qBAAqB,CAAC,WAAW,CAAC,GAAG,qBAAqB,CAAC;AACnE,KAAK;AACL,IAAI,MAAM,CAAC,wBAAwB,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,mCAAmC,CAAC,IAAI,EAAE,CAAC;AACxG,IAAI,MAAM,mBAAmB,GAAG,YAAY,CAAC,qBAAqB,CAAC,GAAG,wBAAwB,CAAC;AAC/F,IAAI,MAAM,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACnG,IAAI,OAAO;AACX,QAAQ,mBAAmB;AAC3B,QAAQ,oBAAoB,EAAE;AAC9B,YAAY,IAAI,GAAG,YAAY,GAAG,0BAA0B;AAC5D,YAAY,EAAE,GAAG,YAAY,GAAG,0BAA0B;AAC1D,SAAS;AACT,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,wBAAwB,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,EAAE;AACpH,IAAI,QAAQ,cAAc,CAAC,MAAM;AACjC,QAAQ,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM;AACpE,QAAQ,cAAc;AACtB,aAAa,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACxC,aAAa,KAAK,CAAC,IAAI,CAAC;AACxB,aAAa,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE;AACvD,CAAC;AACD;AACA,SAAS,mBAAmB,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,iBAAiB,GAAG,EAAE;AACjF,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAC9D,IAAI,OAAO;AACX,QAAQ,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC;AAClD,QAAQ,QAAQ,CAAC,KAAK,CAAC,YAAY;AACnC,cAAc,gBAAgB,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM;AAChE,cAAc,gBAAgB,CAAC,MAAM,CAAC;AACtC,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,iCAAiC,CAAC,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,GAAG,gBAAgB,EAAE,GAAG,GAAG,gBAAgB,EAAE,iBAAiB,GAAG,EAAE;AAC/I,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK;AACrC,QAAQ,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE;AACpE,YAAY,gBAAgB;AAC5B,YAAY,iBAAiB;AAC7B,SAAS,CAAC,CAAC;AACX,QAAQ,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AACzE,QAAQ,MAAM,UAAU,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACjE,QAAQ,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE;AAC7C,YAAY,QAAQ,EAAE,gBAAgB;AACtC,YAAY,QAAQ;AACpB,YAAY,iBAAiB;AAC7B,SAAS,CAAC,EAAE;AACZ,YAAY,MAAM,SAAS,GAAG,sBAAsB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;AACnF,YAAY,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,CAAC;AAC3F,kBAAkB,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5E,kBAAkB,SAAS,CAAC;AAC5B,YAAY,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI;AAChE,gBAAgB,KAAK;AACrB,gBAAgB,GAAG,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,CAAC;AACjG,YAAY,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACxD,YAAY,OAAO;AACnB,gBAAgB,SAAS;AACzB,gBAAgB,KAAK,EAAE,UAAU,GAAG,IAAI;AACxC,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5D,QAAQ,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAClD,QAAQ,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AACzE,YAAY,QAAQ,EAAE,gBAAgB;AACtC,YAAY,iBAAiB;AAC7B,YAAY,QAAQ;AACpB,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO;AACf,YAAY,SAAS;AACrB,YAAY,KAAK,EAAE,cAAc;AACjC,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,+BAA+B,CAAC,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,QAAQ,GAAG,EAAE;AACpH,IAAI,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,CAAC,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9I,IAAI,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK;AACvC,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;AAClD,QAAQ,IAAI,IAAI,KAAK,qBAAqB,EAAE;AAC5C,YAAY,OAAO;AACnB,gBAAgB,YAAY;AAC5B,gBAAgB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE;AAC/D,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AACnE,QAAQ,IAAI,CAAC,aAAa,EAAE;AAC5B,YAAY,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC9C,SAAS;AACT,QAAQ,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC;AACxC,QAAQ,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;AACrC,QAAQ,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxF,QAAQ,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,mBAAmB,CAAC,gBAAgB,EAAE;AAC/E,YAAY,gBAAgB;AAC5B,YAAY,iBAAiB;AAC7B,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,cAAc,GAAG,EAAE,CAAC;AAChC,QAAQ,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAClF,QAAQ,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,GAAG,kBAAkB,CAAC;AAC7E,YAAY,UAAU;AACtB,YAAY,gBAAgB;AAC5B,YAAY,MAAM,EAAE,CAAC;AACrB,YAAY,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AACjC,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,UAAU,IAAI,CAAC,mBAAmB,EAAE;AAChD,YAAY,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC9C,SAAS;AACT,QAAQ,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;AACjC,QAAQ,cAAc,IAAI,mBAAmB,CAAC;AAC9C,QAAQ,MAAM,eAAe,GAAG,eAAe,CAAC,+BAA+B,CAAC,CAAC;AACjF,QAAQ,MAAM,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,GAAG,kBAAkB,CAAC;AACjF,YAAY,UAAU;AACtB,YAAY,eAAe;AAC3B,YAAY,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM;AACpE,YAAY,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AACjC,YAAY,QAAQ;AACpB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,UAAU,IAAI,CAAC,mBAAmB,EAAE;AAChD,YAAY,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC9C,SAAS;AACT,QAAQ,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACrC,QAAQ,cAAc,IAAI,oBAAoB;AAC9C,cAAc,iBAAiB,GAAG,mBAAmB;AACrD,cAAc,mBAAmB,CAAC;AAClC,QAAQ,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACvD,QAAQ,OAAO;AACf,YAAY,YAAY,EAAE;AAC1B,gBAAgB,SAAS;AACzB,gBAAgB,KAAK,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;AACpD,oBAAoB,OAAO;AAC3B,yBAAyB,KAAK,CAAC,qBAAqB,CAAC;AACrD,yBAAyB,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnE,yBAAyB,IAAI,CAAC,qBAAqB,CAAC;AACpD,oBAAoB,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5C,aAAa;AACb,YAAY,IAAI,EAAE,OAAO;AACzB,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,+BAA+B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,iBAAiB,GAAG,mBAAmB,EAAE,QAAQ,GAAG,CAAC,GAAG,EAAE;AACxJ,IAAI,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACrE,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE;AAC7E,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,KAAK,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7F,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;AAC1C,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACnG,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE;AACpD,YAAY,sCAAsC,EAAE;AACpD,YAAY,8BAA8B,EAAE;AAC5C,YAAY,uCAAuC,CAAC;AACpD,gBAAgB,gBAAgB;AAChC,gBAAgB,oBAAoB,EAAE,aAAa;AACnD,gBAAgB,qBAAqB,EAAE,iBAAiB;AACxD,gBAAgB,4BAA4B,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;AACzE,aAAa,CAAC;AACd,YAAY,kCAAkC,EAAE;AAChD,YAAY,yBAAyB,CAAC;AACtC,gBAAgB,gBAAgB;AAChC,gBAAgB,qBAAqB,EAAE,aAAa;AACpD,gBAAgB,iBAAiB;AACjC,aAAa,CAAC;AACd,YAAY,+BAA+B,CAAC;AAC5C,gBAAgB,gBAAgB;AAChC,gBAAgB,qBAAqB,EAAE,aAAa;AACpD,gBAAgB,iBAAiB;AACjC,gBAAgB,QAAQ;AACxB,aAAa,CAAC;AACd,SAAS,EAAE,cAAc,EAAE;AAC3B,YAAY,0CAA0C,CAAC;AACvD,gBAAgB,gBAAgB;AAChC,gBAAgB,oBAAoB,EAAE,aAAa;AACnD,gBAAgB,OAAO,EAAE,KAAK,IAAI;AAClC,oBAAoB,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,mBAAmB,CAAC,KAAK,EAAE;AAChF,wBAAwB,gBAAgB;AACxC,wBAAwB,iBAAiB;AACzC,qBAAqB,CAAC,CAAC;AACvB,oBAAoB,OAAO,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAC/E,iBAAiB;AACjB,gBAAgB,OAAO,EAAE,CAAC,CAAC,mBAAmB,CAAC,EAAE,YAAY,KAAK,mBAAmB;AACrF,qBAAqB,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,GAAG,EAAE,CAAC;AACvF,aAAa,CAAC;AACd,YAAY,iCAAiC,CAAC;AAC9C,gBAAgB,GAAG;AACnB,gBAAgB,GAAG;AACnB,gBAAgB,gBAAgB;AAChC,gBAAgB,QAAQ;AACxB,gBAAgB,iBAAiB;AACjC,aAAa,CAAC;AACd,SAAS,EAAE,OAAO,EAAE;AACpB,YAAY,gCAAgC,CAAC;AAC7C,gBAAgB,IAAI,EAAE,QAAQ;AAC9B,gBAAgB,QAAQ,EAAE,CAAC,EAAE,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC9E,gBAAgB,oBAAoB,EAAE,+BAA+B;AACrE,aAAa,CAAC;AACd,SAAS,EAAE,CAAC,CAAC;AACb,CAAC;AAwoBD;AACA,SAAS,+BAA+B,CAAC,oBAAoB,EAAE,QAAQ,EAAE;AACzE,IAAI,MAAM,eAAe,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC;AAClE,IAAI,MAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,CAAC,KAAK,EAAE,qBAAqB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxG,IAAI,OAAO,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,UAAU,KAAK;AACnD,QAAQ,IAAI,UAAU,KAAK,gBAAgB,IAAI,UAAU,KAAK,eAAe,EAAE;AAC/E,YAAY,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAC1C,SAAS;AACT,QAAQ,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC;AAClD,QAAQ,IAAI,UAAU,KAAK,YAAY,EAAE;AACzC,YAAY,MAAM,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,GAAG,kBAAkB,CAAC;AACrF,gBAAgB,UAAU,EAAE,KAAK;AACjC,gBAAgB,eAAe;AAC/B,gBAAgB,MAAM,EAAE,CAAC;AACzB,gBAAgB,SAAS;AACzB,gBAAgB,QAAQ;AACxB,aAAa,CAAC,CAAC;AACf,YAAY,OAAO;AACnB,gBAAgB,YAAY,EAAE;AAC9B,oBAAoB,KAAK,EAAE,mBAAmB;AAC9C,oBAAoB,SAAS,EAAE,oBAAoB;AACnD,iBAAiB;AACjB,gBAAgB,IAAI;AACpB,aAAa,CAAC;AACd,SAAS;AACT,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AACnE,QAAQ,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC;AACxC,QAAQ,IAAI,EAAE,GAAG,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC;AAC9C,QAAQ,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxF,QAAQ,MAAM,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,GAAG,kBAAkB,CAAC;AACjF,YAAY,UAAU,EAAE,gBAAgB;AACxC,YAAY,eAAe;AAC3B,YAAY,MAAM,EAAE,CAAC;AACrB,YAAY,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;AACjC,YAAY,QAAQ;AACpB,SAAS,CAAC,CAAC;AACX,QAAQ,IAAI,gBAAgB,IAAI,CAAC,mBAAmB,EAAE;AACtD,YAAY,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC9C,SAAS;AACT,QAAQ,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACrC,QAAQ,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5D,QAAQ,OAAO;AACf,YAAY,YAAY,EAAE;AAC1B,gBAAgB,SAAS;AACzB,gBAAgB,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;AACzD,oBAAoB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AAC9C,oBAAoB,mBAAmB,CAAC,KAAK,CAAC,EAAE,CAAC;AACjD,aAAa;AACb,YAAY,IAAI,EAAE,OAAO;AACzB,SAAS,CAAC;AACV,KAAK,CAAC;AACN,CAAC;AACD;AACA,SAAS,2BAA2B,CAAC,EAAE,IAAI,EAAE,oBAAoB,GAAG,EAAE,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;AACrF,IAAI,MAAM,4BAA4B,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,+BAA+B,CAAC,EAAE,oBAAoB,CAAC,CAAC;AACjI,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,aAAa,EAAE;AAC9K,YAAY,sCAAsC,EAAE;AACpD,YAAY,8BAA8B,EAAE;AAC5C,YAAY,kCAAkC,EAAE;AAChD,YAAY,+BAA+B,CAAC,4BAA4B,EAAE,IAAI,CAAC;AAC/E,SAAS,EAAE,OAAO,EAAE;AACpB,YAAY,gCAAgC,CAAC;AAC7C,gBAAgB,QAAQ,EAAE,IAAI;AAC9B,gBAAgB,IAAI;AACpB,gBAAgB,oBAAoB,EAAE,4BAA4B;AAClE,aAAa,CAAC;AACd,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;AACvC;;AC53DA,MAAM,yBAAyB,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,eAAe,GAAG,SAAS,CAAC;AAC9F;AACA,SAAS,UAAU,CAAC,CAAC,EAAE;AACvB,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,IAAI,CAAC,CAAC;AACnD,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACK,MAAC,UAAU,GAAG,CAAC;AACpB,EAAE,OAAO,GAAG,IAAI;AAChB,EAAE,gBAAgB,GAAG,iCAAiC;AACtD,CAAC,GAAG,EAAE,KAAK;AACX,EAAE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvD,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/C,EAAE,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,IAAI;AAC1C,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;AACzB,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACtD,EAAE,kBAAkB,CAAC,OAAO,GAAG,gBAAgB,CAAC;AAChD,EAAE,yBAAyB,CAAC,MAAM;AAClC,IAAI,IAAI,CAAC,WAAW,EAAE;AACtB,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACvC,IAAI,MAAM,gBAAgB,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;AACpD,IAAI,IAAI,UAAU,CAAC,gBAAgB,CAAC,EAAE;AACtC,MAAM,KAAK,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI;AACvC,QAAQ,IAAI,kBAAkB,CAAC,OAAO,KAAK,SAAS,EAAE;AACtD,UAAU,UAAU,CAAC,EAAE,CAAC,CAAC;AACzB,SAAS;AACT,OAAO,CAAC,CAAC;AACT,KAAK,MAAM;AACX,MAAM,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACnC,KAAK;AACL,GAAG,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAC1D,EAAE,yBAAyB,CAAC,MAAM;AAClC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE;AAC9B,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxD,IAAI,OAAO,MAAM;AACjB,MAAM,aAAa,CAAC,OAAO,EAAE,CAAC;AAC9B,KAAK,CAAC;AACN,GAAG,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AACzB,EAAE,OAAO,WAAW,CAAC;AACrB;;;;","x_google_ignoreList":[0,1,2]}
|