{"version":3,"sources":["../src/index.ts","../src/core/Emitter.ts","../src/core/Filter.ts","../src/core/Core.ts","../src/validators/index.ts","../src/validators/notEmpty.ts","../src/validators/blank.ts","../src/validators/digits.ts","../src/validators/integer.ts","../src/validators/numeric.ts","../src/validators/email.ts","../src/validators/uri.ts","../src/validators/ip.ts","../src/validators/regexp.ts","../src/validators/between.ts","../src/validators/greaterThan.ts","../src/validators/lessThan.ts","../src/validators/stringLength.ts","../src/validators/stringCase.ts","../src/validators/identical.ts","../src/validators/different.ts","../src/validators/choice.ts","../src/validators/file.ts","../src/validators/creditCard.ts","../src/validators/date.ts","../src/validators/callback.ts","../src/validators/promise.ts","../src/validators/remote.ts","../src/validators/base64.ts","../src/validators/hex.ts","../src/validators/mac.ts","../src/validators/bic.ts","../src/validators/uuid.ts","../src/validators/vat.ts","../src/validators/id.ts","../src/validators/color.ts","../src/validators/step.ts","../src/validators/vin.ts","../src/validators/isbn.ts","../src/validators/ismn.ts","../src/validators/ean.ts","../src/validators/issn.ts","../src/validators/sedol.ts","../src/validators/grid.ts","../src/validators/cusip.ts","../src/validators/isin.ts","../src/validators/imei.ts","../src/validators/imo.ts","../src/validators/meid.ts","../src/validators/ein.ts","../src/validators/rtn.ts","../src/validators/siren.ts","../src/validators/siret.ts","../src/validators/iban.ts","../src/validators/phone.ts","../src/validators/zipCode.ts","../src/core/Plugin.ts","../src/plugins/core/Dependency.ts","../src/plugins/core/StartEndDate.ts","../src/plugins/core/Sequence.ts","../src/plugins/core/Transformer.ts","../src/plugins/core/Aria.ts","../src/plugins/core/AutoFocus.ts","../src/plugins/core/Tooltip.ts","../src/plugins/core/DefaultSubmit.ts","../src/plugins/core/FieldStatus.ts","../src/plugins/core/Declarative.ts","../src/plugins/core/CharCounter.ts","../src/plugins/core/Summary.ts","../src/plugins/core/PasswordStrength.ts","../src/plugins/core/Excluded.ts","../src/plugins/core/Trigger.ts","../src/plugins/core/Message.ts","../src/plugins/core/Icon.ts","../src/plugins/core/SubmitButton.ts","../src/plugins/frameworks/Bootstrap5.ts","../src/plugins/frameworks/Bulma.ts","../src/plugins/frameworks/Tailwind.ts","../src/locales/en_US.ts","../src/locales/pt_BR.ts"],"sourcesContent":["// src/index.ts\nimport { Core } from \"./core/Core\";\nimport type { ValidareOptions } from \"./core/index\";\nimport * as builtinValidators from \"./validators/index\";\n\n/**\n * Create a Validare instance with all built-in validators pre-registered.\n * Users reference validators by name string in field config:\n *   validators: { notEmpty: {}, email: { message: 'Invalid' } }\n */\nexport function validare(form: HTMLFormElement, options: ValidareOptions): Core {\n  const { fields, plugins = {}, locale } = options;\n  const core = new Core(form);\n\n  // Pre-register all built-in validators\n  for (const [name, factory] of Object.entries(builtinValidators)) {\n    core.registerValidator(name, factory);\n  }\n\n  if (locale) core.setLocale(locale);\n\n  for (const [field, opts] of Object.entries(fields ?? {})) {\n    core.addField(field, opts);\n  }\n\n  for (const [name, plugin] of Object.entries(plugins)) {\n    core.registerPlugin(name, plugin);\n  }\n\n  return core;\n}\n\n// Re-export core types and classes\nexport { Core } from \"./core/Core\";\nexport { Plugin } from \"./core/Plugin\";\nexport type {\n  ValidareOptions,\n  ValidatorInput,\n  ValidatorResult,\n  ValidatorObject,\n  ValidatorFactory,\n  ValidationStatus,\n  FieldOptions,\n  ValidatorOptions,\n  LocaleData,\n  ElementValidatedPayload,\n} from \"./core/index\";\n\n// Re-export validators (for advanced users who want to register manually)\nexport * from \"./validators/index\";\n\n// Re-export plugins\nexport * from \"./plugins/index\";\n\n// Re-export locales\nexport * from \"./locales/index\";\n","// src/core/Emitter.ts\n\nexport interface Emitter {\n  on(event: string, handler: (...args: unknown[]) => void): void;\n  off(event: string, handler: (...args: unknown[]) => void): void;\n  emit(event: string, ...args: unknown[]): void;\n}\n\nexport function createEmitter(): Emitter {\n  const listeners = new Map<string, Set<(...args: unknown[]) => void>>();\n\n  return {\n    on(event, handler) {\n      if (!listeners.has(event)) listeners.set(event, new Set());\n      listeners.get(event)?.add(handler);\n    },\n    off(event, handler) {\n      listeners.get(event)?.delete(handler);\n    },\n    emit(event, ...args) {\n      const handlers = listeners.get(event);\n      if (handlers) {\n        for (const h of handlers) h(...args);\n      }\n    },\n  };\n}\n","// src/core/Filter.ts\n\nexport interface Filter {\n  add(name: string, func: (...args: unknown[]) => unknown): void;\n  remove(name: string, func: (...args: unknown[]) => unknown): void;\n  execute<T>(name: string, defaultValue: T, args: unknown[]): T;\n}\n\nexport function createFilter(): Filter {\n  const handlers = new Map<string, Array<(...args: unknown[]) => unknown>>();\n\n  return {\n    add(name, func) {\n      if (!handlers.has(name)) handlers.set(name, []);\n      handlers.get(name)?.push(func);\n    },\n    remove(name, func) {\n      const list = handlers.get(name);\n      if (!list) return;\n      const idx = list.indexOf(func);\n      if (idx !== -1) list.splice(idx, 1);\n    },\n    execute<T>(name: string, defaultValue: T, args: unknown[]): T {\n      const list = handlers.get(name);\n      if (!list || list.length === 0) return defaultValue;\n      let result: unknown = defaultValue;\n      for (const fn of list) {\n        result = fn(result, ...args);\n      }\n      return result as T;\n    },\n  };\n}\n","// src/core/Core.ts\nimport { type Emitter, createEmitter } from \"./Emitter\";\nimport { type Filter, createFilter } from \"./Filter\";\nimport type { Plugin } from \"./Plugin\";\nimport type {\n  ElementValidatedPayload,\n  FieldOptions,\n  LocaleData,\n  ValidationStatus,\n  ValidatorFactory,\n  ValidatorInput,\n  ValidatorOptions,\n} from \"./types\";\n\nexport class Core {\n  readonly form: HTMLFormElement;\n\n  private fields: Record<string, FieldOptions> = {};\n  private elements: Record<string, HTMLElement[]> = {};\n  private plugins: Record<string, Plugin> = {};\n  private results = new Map<string, ValidationStatus>();\n  private validatorResults = new Map<string, Record<string, ValidationStatus>>();\n  private validators: Record<string, ValidatorFactory> = {};\n  private locale: LocaleData = {};\n  private emitter: Emitter;\n  private filter: Filter;\n\n  constructor(form: HTMLFormElement) {\n    this.form = form;\n    this.emitter = createEmitter();\n    this.filter = createFilter();\n  }\n\n  // ─── Events ──────────────────────────────────────────────────────────────\n\n  on(event: string, handler: (...args: unknown[]) => void): this {\n    this.emitter.on(event, handler);\n    return this;\n  }\n\n  off(event: string, handler: (...args: unknown[]) => void): this {\n    this.emitter.off(event, handler);\n    return this;\n  }\n\n  emit(event: string, ...args: unknown[]): this {\n    this.emitter.emit(event, ...args);\n    return this;\n  }\n\n  // ─── Filters ─────────────────────────────────────────────────────────────\n\n  registerFilter(name: string, func: (...args: unknown[]) => unknown): this {\n    this.filter.add(name, func);\n    return this;\n  }\n\n  deregisterFilter(name: string, func: (...args: unknown[]) => unknown): this {\n    this.filter.remove(name, func);\n    return this;\n  }\n\n  executeFilter<T>(name: string, defaultValue: T, args: unknown[]): T {\n    return this.filter.execute(name, defaultValue, args);\n  }\n\n  // ─── Plugins ─────────────────────────────────────────────────────────────\n\n  registerPlugin(name: string, plugin: Plugin): this {\n    if (this.plugins[name]) {\n      throw new Error(`Plugin \"${name}\" is already registered`);\n    }\n    plugin.setCore(this);\n    plugin.install();\n    this.plugins[name] = plugin;\n    return this;\n  }\n\n  deregisterPlugin(name: string): this {\n    this.plugins[name]?.uninstall();\n    delete this.plugins[name];\n    return this;\n  }\n\n  enablePlugin(name: string): this {\n    this.plugins[name]?.enable();\n    return this;\n  }\n\n  disablePlugin(name: string): this {\n    this.plugins[name]?.disable();\n    return this;\n  }\n\n  // ─── Validators ───────────────────────────────────────────────────────────\n\n  registerValidator(name: string, factory: ValidatorFactory): this {\n    this.validators[name] = factory;\n    return this;\n  }\n\n  /** Remove a single validator from a field's validator map. No-op if not found. */\n  removeValidator(field: string, validatorName: string): this {\n    const fieldOpts = this.fields[field];\n    if (fieldOpts?.validators[validatorName]) {\n      delete fieldOpts.validators[validatorName];\n      // Invalidate caches so next validateField re-runs cleanly\n      this.results.delete(field);\n      const vr = this.validatorResults.get(field);\n      if (vr) delete vr[validatorName];\n    }\n    return this;\n  }\n\n  /** Remove a validator factory from the global registry. No-op if not found. */\n  deregisterValidator(name: string): this {\n    delete this.validators[name];\n    return this;\n  }\n\n  // ─── Fields ───────────────────────────────────────────────────────────────\n\n  addField(field: string, options: FieldOptions): this {\n    this.fields[field] = this.fields[field]\n      ? {\n          selector: options.selector ?? this.fields[field].selector,\n          validators: { ...this.fields[field].validators, ...options.validators },\n        }\n      : options;\n    this.elements[field] = this.queryElements(field);\n    this.emit(\"core.field.added\", {\n      field,\n      elements: this.elements[field],\n      options: this.fields[field],\n    });\n    return this;\n  }\n\n  removeField(field: string): this {\n    if (!this.fields[field]) {\n      throw new Error(`Field \"${field}\" is not defined`);\n    }\n    const elements = this.elements[field];\n    const options = this.fields[field];\n    delete this.elements[field];\n    delete this.fields[field];\n    this.results.delete(field);\n    this.validatorResults.delete(field);\n    this.emit(\"core.field.removed\", { field, elements, options });\n    return this;\n  }\n\n  getFields(): Record<string, FieldOptions> {\n    return { ...this.fields };\n  }\n\n  getElements(field: string): HTMLElement[] {\n    return this.elements[field] ?? [];\n  }\n\n  getValidatorResult(field: string, validator: string): ValidationStatus {\n    return this.validatorResults.get(field)?.[validator] ?? \"NotValidated\";\n  }\n\n  // ─── Locale ───────────────────────────────────────────────────────────────\n\n  setLocale(locale: LocaleData): this {\n    this.locale = locale;\n    return this;\n  }\n\n  // ─── Validator control ────────────────────────────────────────────────────\n\n  enableValidator(field: string, validator: string): this {\n    const v = this.fields[field]?.validators[validator];\n    if (v) {\n      v.enabled = true;\n      this.emit(\"core.validator.enabled\", { field, validator });\n    }\n    return this;\n  }\n\n  disableValidator(field: string, validator: string): this {\n    const v = this.fields[field]?.validators[validator];\n    if (v) {\n      v.enabled = false;\n      this.emit(\"core.validator.disabled\", { field, validator });\n    }\n    return this;\n  }\n\n  // ─── Validation ───────────────────────────────────────────────────────────\n\n  validate(): Promise<ValidationStatus> {\n    this.emit(\"core.form.validating\", { instance: this });\n    return this.filter\n      .execute<Promise<void>>(\"validate-pre\", Promise.resolve(), [])\n      .then(() => Promise.all(Object.keys(this.fields).map((f) => this.validateField(f))))\n      .then((results) => {\n        if (results.includes(\"Invalid\")) {\n          this.emit(\"core.form.invalid\", { instance: this });\n          return \"Invalid\";\n        }\n        if (results.includes(\"NotValidated\")) {\n          this.emit(\"core.form.notvalidated\", { instance: this });\n          return \"NotValidated\";\n        }\n        this.emit(\"core.form.valid\", { instance: this });\n        return \"Valid\";\n      });\n  }\n\n  validateField(field: string): Promise<ValidationStatus> {\n    const cached = this.results.get(field);\n    if (cached === \"Valid\" || cached === \"Invalid\") {\n      return Promise.resolve(cached);\n    }\n\n    this.emit(\"core.field.validating\", { field });\n    const elements = this.elements[field];\n\n    if (!elements || elements.length === 0) {\n      this.results.set(field, \"NotValidated\");\n      this.emit(\"core.field.validated\", { field, result: \"NotValidated\", elements: [] });\n      this.emit(\"core.field.notvalidated\", { field, elements: [] });\n      return Promise.resolve(\"NotValidated\");\n    }\n\n    return Promise.all(elements.map((el) => this.validateElement(field, el))).then((results) => {\n      const status: ValidationStatus = results.includes(\"Invalid\")\n        ? \"Invalid\"\n        : results.includes(\"NotValidated\")\n          ? \"NotValidated\"\n          : \"Valid\";\n      this.results.set(field, status);\n      this.emit(\"core.field.validated\", { field, result: status, elements });\n      if (status === \"Valid\") this.emit(\"core.field.valid\", { field, elements });\n      else if (status === \"Invalid\") this.emit(\"core.field.invalid\", { field, elements });\n      else this.emit(\"core.field.notvalidated\", { field, elements });\n      return status;\n    });\n  }\n\n  private validateElement(field: string, element: HTMLElement): Promise<ValidationStatus> {\n    const fieldOpts = this.fields[field];\n    if (!fieldOpts) return Promise.resolve(\"NotValidated\");\n\n    const allValidatorNames = Object.keys(fieldOpts.validators);\n    const activeValidatorNames = allValidatorNames.filter((name) => {\n      const opts = fieldOpts.validators[name];\n      if (opts.enabled === false) return false;\n      return this.filter.execute<boolean>(\"field-should-validate\", true, [field, name, element]);\n    });\n\n    this.emit(\"core.element.validating\", { field, element, elements: this.elements[field] });\n\n    if (activeValidatorNames.length === 0) {\n      this.emit(\"core.element.ignored\", { field, element, elements: this.elements[field] });\n      const payload: ElementValidatedPayload = {\n        field,\n        element,\n        elements: this.elements[field],\n        valid: true,\n        result: \"Valid\",\n        validators: {},\n      };\n      this.emit(\"core.element.validated\", payload);\n      return Promise.resolve(\"Valid\");\n    }\n\n    // Validators skipped by filter (e.g. Excluded, Sequence)\n    const ignoredValidatorNames = allValidatorNames.filter(\n      (name) => !activeValidatorNames.includes(name) && fieldOpts.validators[name].enabled !== false,\n    );\n    for (const name of ignoredValidatorNames) {\n      this.emit(\"core.validator.notvalidated\", { field, validator: name });\n    }\n\n    const rawValue = this.getElementValue(element);\n\n    const promises = activeValidatorNames.map((name) => {\n      const factory = this.validators[name];\n      if (!factory) {\n        this.emit(\"core.validator.notvalidated\", { field, validator: name });\n        return Promise.resolve({\n          name,\n          status: \"NotValidated\" as ValidationStatus,\n          valid: false,\n          message: \"\",\n        });\n      }\n\n      // Allow plugins (e.g. Transformer) to transform the value per validator\n      const value = this.filter.execute<string>(\"field-value\", rawValue, [field, element, name]);\n\n      const opts: ValidatorOptions = fieldOpts.validators[name];\n      const input: ValidatorInput = {\n        value,\n        options: opts,\n        field,\n        elements: this.elements[field],\n        form: this.form,\n      };\n\n      this.emit(\"core.validator.validating\", { field, validator: name });\n\n      return Promise.resolve(factory().validate(input)).then((result) => {\n        const status: ValidationStatus = result.valid ? \"Valid\" : \"Invalid\";\n        // Priority: field opts.message > validator result.message > locale > default\n        const message =\n          (typeof opts.message === \"string\" ? opts.message : undefined) ??\n          result.message ??\n          this.locale[name]?.default ??\n          \"This value is not valid\";\n\n        // Cache per-validator result for Sequence plugin\n        if (!this.validatorResults.has(field)) {\n          this.validatorResults.set(field, {});\n        }\n        const vr = this.validatorResults.get(field);\n        if (vr) vr[name] = status;\n\n        this.emit(\"core.validator.validated\", {\n          field,\n          validator: name,\n          result: { ...result, status, message },\n        });\n        return { name, status, valid: result.valid, message };\n      });\n    });\n\n    return Promise.all(promises).then((results) => {\n      const validatorsMap: ElementValidatedPayload[\"validators\"] = {};\n      for (const r of results) {\n        validatorsMap[r.name] = { valid: r.valid, message: r.message, result: r.status };\n      }\n\n      const status: ValidationStatus = results.some((r) => r.status === \"Invalid\")\n        ? \"Invalid\"\n        : results.some((r) => r.status === \"NotValidated\")\n          ? \"NotValidated\"\n          : \"Valid\";\n\n      const payload: ElementValidatedPayload = {\n        field,\n        element,\n        elements: this.elements[field],\n        valid: status === \"Valid\",\n        result: status,\n        validators: validatorsMap,\n      };\n      const finalPayload = this.filter.execute<ElementValidatedPayload>(\n        \"element-validated\",\n        payload,\n        [],\n      );\n      this.emit(\"core.element.validated\", finalPayload);\n      if (status === \"NotValidated\") {\n        this.emit(\"core.element.notvalidated\", { field, element, elements: this.elements[field] });\n      }\n      return status;\n    });\n  }\n\n  private getElementValue(element: HTMLElement): string {\n    const el = element as HTMLInputElement;\n    if (el.type === \"checkbox\" || el.type === \"radio\") {\n      return el.checked ? el.value || \"on\" : \"\";\n    }\n    return el.value ?? \"\";\n  }\n\n  private queryElements(field: string): HTMLElement[] {\n    const opts = this.fields[field];\n    const selector = opts?.selector ?? `[name=\"${field}\"]`;\n    return Array.from(this.form.querySelectorAll<HTMLElement>(selector));\n  }\n\n  // ─── Reset / Destroy ──────────────────────────────────────────────────────\n\n  resetField(field: string): this {\n    this.results.delete(field);\n    this.validatorResults.delete(field);\n    this.emit(\"core.field.reset\", { field });\n    return this;\n  }\n\n  reset(): this {\n    this.results.clear();\n    this.validatorResults.clear();\n    this.emit(\"core.form.reset\", { instance: this });\n    return this;\n  }\n\n  destroy(): void {\n    for (const name of Object.keys(this.plugins)) {\n      this.deregisterPlugin(name);\n    }\n    this.fields = {};\n    this.elements = {};\n    this.results.clear();\n    this.validatorResults.clear();\n  }\n}\n","// src/validators/index.ts\nexport { notEmpty } from \"./notEmpty\";\nexport { blank } from \"./blank\";\nexport { digits } from \"./digits\";\nexport { integer } from \"./integer\";\nexport { numeric } from \"./numeric\";\nexport { email } from \"./email\";\nexport { uri } from \"./uri\";\nexport { ip } from \"./ip\";\nexport { regexp } from \"./regexp\";\nexport { between } from \"./between\";\nexport { greaterThan } from \"./greaterThan\";\nexport { lessThan } from \"./lessThan\";\nexport { stringLength } from \"./stringLength\";\nexport { stringCase } from \"./stringCase\";\nexport { identical } from \"./identical\";\nexport { different } from \"./different\";\nexport { choice } from \"./choice\";\nexport { file } from \"./file\";\nexport { creditCard } from \"./creditCard\";\nexport { date } from \"./date\";\nexport { callback } from \"./callback\";\nexport { promise } from \"./promise\";\nexport { remote } from \"./remote\";\nexport { base64 } from \"./base64\";\nexport { hex } from \"./hex\";\nexport { mac } from \"./mac\";\nexport { bic } from \"./bic\";\nexport { uuid } from \"./uuid\";\nexport { vat } from \"./vat\";\nexport { id } from \"./id\";\nexport { color } from \"./color\";\nexport { step } from \"./step\";\nexport { vin } from \"./vin\";\nexport { isbn } from \"./isbn\";\nexport { ismn } from \"./ismn\";\nexport { ean } from \"./ean\";\nexport { issn } from \"./issn\";\nexport { sedol } from \"./sedol\";\nexport { grid } from \"./grid\";\nexport { cusip } from \"./cusip\";\nexport { isin } from \"./isin\";\nexport { imei } from \"./imei\";\nexport { imo } from \"./imo\";\nexport { meid } from \"./meid\";\nexport { ein } from \"./ein\";\nexport { rtn } from \"./rtn\";\nexport { siren } from \"./siren\";\nexport { siret } from \"./siret\";\nexport { iban } from \"./iban\";\nexport { phone } from \"./phone\";\nexport { zipCode } from \"./zipCode\";\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const notEmpty: ValidatorFactory = () => ({\n  validate(input) {\n    const trim = !!(input.options as { trim?: boolean }).trim;\n    const { value } = input;\n    const valid = trim ? value.trim() !== \"\" : value !== \"\";\n    return { valid };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const blank: ValidatorFactory = () => ({\n  validate(input) {\n    const trim = !!(input.options as { trim?: boolean }).trim;\n    const { value } = input;\n    const valid = trim ? value.trim() === \"\" : value === \"\";\n    return { valid };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const digits: ValidatorFactory = () => ({\n  validate(input) {\n    return { valid: /^\\d+$/.test(input.value) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const integer: ValidatorFactory = () => ({\n  validate(input) {\n    return { valid: /^-?\\d+$/.test(input.value) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const numeric: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { thousandsSeparator?: string; decimalSeparator?: string };\n    let value = input.value;\n    const thousands = opts.thousandsSeparator ?? \"\";\n    const decimal = opts.decimalSeparator ?? \".\";\n    if (thousands) value = value.split(thousands).join(\"\");\n    if (decimal !== \".\") value = value.replace(decimal, \".\");\n    const n = Number(value);\n    return { valid: value !== \"\" && !Number.isNaN(n) && Number.isFinite(n) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\n// RFC 5321 simplified — covers 99.9% of real email addresses\nconst EMAIL_REGEX =\n  /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n\nexport const email: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { multiple?: boolean };\n    if (opts.multiple) {\n      const addresses = input.value.split(/[,;]/).map((s) => s.trim()).filter(Boolean);\n      if (addresses.length === 0) return { valid: false };\n      return { valid: addresses.every((addr) => EMAIL_REGEX.test(addr)) };\n    }\n    return { valid: EMAIL_REGEX.test(input.value) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const uri: ValidatorFactory = () => ({\n  validate(input) {\n    if (!input.value) return { valid: false };\n    try {\n      new URL(input.value);\n      return { valid: true };\n    } catch {\n      return { valid: false };\n    }\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst IPV4 = /^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/;\n\nconst IPV6 =\n  /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::([0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|^([0-9a-fA-F]{1,4}:){1,7}:$|^([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}$|^([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}$|^([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}$|^([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}$|^([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}$|^[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})$|^:((:[0-9a-fA-F]{1,4}){1,7}|:)$/;\n\nexport const ip: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { ipv4?: boolean; ipv6?: boolean };\n    const allowV4 = opts.ipv4 !== false;\n    const allowV6 = opts.ipv6 !== false;\n    if (allowV4 && IPV4.test(input.value)) return { valid: true };\n    if (allowV6 && IPV6.test(input.value)) return { valid: true };\n    return { valid: false };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const regexp: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { regexp: string | RegExp; flags?: string };\n    const regex = opts.regexp instanceof RegExp ? opts.regexp : new RegExp(opts.regexp, opts.flags);\n    return { valid: regex.test(input.value) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const between: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { min: number; max: number; inclusive?: boolean };\n    const value = Number.parseFloat(input.value);\n    if (Number.isNaN(value)) return { valid: false };\n    const inc = opts.inclusive !== false;\n    return {\n      valid: inc ? value >= opts.min && value <= opts.max : value > opts.min && value < opts.max,\n    };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const greaterThan: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { min: number; inclusive?: boolean };\n    const value = Number.parseFloat(input.value);\n    if (Number.isNaN(value)) return { valid: false };\n    const inc = opts.inclusive !== false;\n    return { valid: inc ? value >= opts.min : value > opts.min };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const lessThan: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { max: number; inclusive?: boolean };\n    const value = Number.parseFloat(input.value);\n    if (Number.isNaN(value)) return { valid: false };\n    const inc = opts.inclusive !== false;\n    return { valid: inc ? value <= opts.max : value < opts.max };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const stringLength: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { min?: number; max?: number; trim?: boolean };\n    const value = opts.trim ? input.value.trim() : input.value;\n    const len = value.length;\n    if (opts.min !== undefined && len < opts.min) return { valid: false };\n    if (opts.max !== undefined && len > opts.max) return { valid: false };\n    return { valid: true };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const stringCase: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { case: \"lower\" | \"upper\" };\n    const { value } = input;\n    return {\n      valid: opts.case === \"upper\" ? value === value.toUpperCase() : value === value.toLowerCase(),\n    };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const identical: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { compare: string; trim?: boolean };\n    const compareEl = input.form.querySelector<HTMLInputElement>(`[name=\"${opts.compare}\"]`);\n    if (!compareEl) return { valid: false };\n    const a = opts.trim ? input.value.trim() : input.value;\n    const b = opts.trim ? compareEl.value.trim() : compareEl.value;\n    return { valid: a === b };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const different: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { compare: string; trim?: boolean };\n    const compareEl = input.form.querySelector<HTMLInputElement>(`[name=\"${opts.compare}\"]`);\n    if (!compareEl) return { valid: true };\n    const a = opts.trim ? input.value.trim() : input.value;\n    const b = opts.trim ? compareEl.value.trim() : compareEl.value;\n    return { valid: a !== b };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const choice: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { min?: number; max?: number };\n    const checked = (input.elements as HTMLInputElement[]).filter((el) => el.checked).length;\n    if (opts.min !== undefined && checked < opts.min) return { valid: false };\n    if (opts.max !== undefined && checked > opts.max) return { valid: false };\n    return { valid: true };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const file: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as {\n      extension?: string;\n      maxSize?: number;\n      minFiles?: number;\n      maxFiles?: number;\n    };\n    const el = input.elements[0] as HTMLInputElement;\n    if (!el?.files || el.files.length === 0) return { valid: true };\n\n    const files = Array.from(el.files);\n\n    if (opts.minFiles !== undefined && files.length < opts.minFiles) return { valid: false };\n    if (opts.maxFiles !== undefined && files.length > opts.maxFiles) return { valid: false };\n\n    if (opts.extension) {\n      const allowed = opts.extension.split(\",\").map((e) => e.trim().toLowerCase());\n      for (const f of files) {\n        const ext = f.name.split(\".\").pop()?.toLowerCase() ?? \"\";\n        if (!allowed.includes(ext)) return { valid: false };\n      }\n    }\n\n    if (opts.maxSize !== undefined) {\n      for (const f of files) {\n        if (f.size > opts.maxSize) return { valid: false };\n      }\n    }\n\n    return { valid: true };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\n/** Luhn algorithm — https://en.wikipedia.org/wiki/Luhn_algorithm */\nfunction luhn(value: string): boolean {\n  const digits = value.split(\"\").map(Number);\n  let sum = 0;\n  let isEven = false;\n  for (let i = digits.length - 1; i >= 0; i--) {\n    let d = digits[i];\n    if (isEven) {\n      d *= 2;\n      if (d > 9) d -= 9;\n    }\n    sum += d;\n    isEven = !isEven;\n  }\n  return sum % 10 === 0 && sum > 0;\n}\n\nconst CARD_PATTERNS: Array<{ type: string; pattern: RegExp }> = [\n  { type: \"amex\",        pattern: /^3[47]/ },\n  { type: \"dinersclub\",  pattern: /^3(?:0[0-5]|[68])/ },\n  { type: \"jcb\",         pattern: /^35(?:2[89]|[3-8])/ },\n  { type: \"discover\",    pattern: /^6(?:011|4[4-9]|5)/ },\n  { type: \"maestro\",     pattern: /^(?:6304|6759|676[1-3])/ },\n  { type: \"mastercard\",  pattern: /^5[1-5]/ },\n  { type: \"unionpay\",    pattern: /^62/ },\n  { type: \"visa\",        pattern: /^4/ },\n];\n\nfunction detectType(value: string): string {\n  for (const { type, pattern } of CARD_PATTERNS) {\n    if (pattern.test(value)) return type;\n  }\n  return \"unknown\";\n}\n\nexport const creditCard: ValidatorFactory = () => ({\n  validate(input) {\n    const value = input.value.replace(/[\\s-]/g, \"\");\n    if (!/^\\d+$/.test(value)) return { valid: false };\n    if (!luhn(value)) return { valid: false };\n    return { valid: true, meta: { type: detectType(value) } };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\n// Tokens ordered longest-first to avoid partial matches in alternation\nconst TOKEN_RE = /YYYY|HH|hh|MM|DD|mm|ss|A/g;\n\nfunction escapeRe(s: string): string {\n  return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction buildMatcher(format: string): { re: RegExp; tokens: string[] } | null {\n  const tokens: string[] = [];\n  let reStr = \"\";\n  let lastIndex = 0;\n  TOKEN_RE.lastIndex = 0;\n  let match: RegExpExecArray | null;\n  while ((match = TOKEN_RE.exec(format)) !== null) {\n    reStr += escapeRe(format.slice(lastIndex, match.index));\n    tokens.push(match[0]);\n    if (match[0] === \"YYYY\") reStr += \"(\\\\d{4})\";\n    else if (match[0] === \"A\") reStr += \"(AM|PM|am|pm)\";\n    else reStr += \"(\\\\d{1,2})\";\n    lastIndex = TOKEN_RE.lastIndex;\n  }\n  reStr += escapeRe(format.slice(lastIndex));\n  if (tokens.length === 0) return null;\n  return { re: new RegExp(`^${reStr}$`), tokens };\n}\n\nexport const date: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { format?: string };\n    const format = opts.format ?? \"MM/DD/YYYY\";\n    if (!input.value) return { valid: false };\n\n    const matcher = buildMatcher(format);\n    if (!matcher) return { valid: false };\n\n    const m = matcher.re.exec(input.value);\n    if (!m) return { valid: false };\n\n    let year = 1970, month = 1, day = 1, hours = 0, minutes = 0, seconds = 0, ampm = \"\";\n\n    for (let i = 0; i < matcher.tokens.length; i++) {\n      const val = m[i + 1];\n      switch (matcher.tokens[i]) {\n        case \"YYYY\": year    = Number.parseInt(val, 10); break;\n        case \"MM\":   month   = Number.parseInt(val, 10); break;\n        case \"DD\":   day     = Number.parseInt(val, 10); break;\n        case \"HH\":   hours   = Number.parseInt(val, 10); break;\n        case \"hh\":   hours   = Number.parseInt(val, 10); break;\n        case \"mm\":   minutes = Number.parseInt(val, 10); break;\n        case \"ss\":   seconds = Number.parseInt(val, 10); break;\n        case \"A\":    ampm    = val.toUpperCase(); break;\n      }\n    }\n\n    if (ampm === \"PM\" && hours < 12) hours += 12;\n    if (ampm === \"AM\" && hours === 12) hours = 0;\n\n    if (month < 1 || month > 12) return { valid: false };\n    if (day < 1 || day > 31) return { valid: false };\n    if (hours < 0 || hours > 23) return { valid: false };\n    if (minutes < 0 || minutes > 59) return { valid: false };\n    if (seconds < 0 || seconds > 59) return { valid: false };\n\n    // Verify the date didn't roll over (e.g. Feb 30 → Mar 1)\n    const d = new Date(year, month - 1, day);\n    if (d.getFullYear() !== year || d.getMonth() !== month - 1 || d.getDate() !== day) {\n      return { valid: false };\n    }\n\n    return { valid: true };\n  },\n});\n","import type { ValidatorFactory, ValidatorInput, ValidatorResult } from \"../core/types\";\n\nexport const callback: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { callback: (input: ValidatorInput) => ValidatorResult };\n    return opts.callback(input);\n  },\n});\n","import type { ValidatorFactory, ValidatorInput, ValidatorResult } from \"../core/types\";\n\nexport const promise: ValidatorFactory = () => ({\n  validate(input) {\n    const opts = input.options as { promise: (input: ValidatorInput) => Promise<ValidatorResult> };\n    return opts.promise(input);\n  },\n});\n","import type { ValidatorFactory, ValidatorResult } from \"../core/types\";\n\nexport const remote: ValidatorFactory = () => {\n  const cache = new Map<string, ValidatorResult>();\n\n  return {\n    async validate(input): Promise<ValidatorResult> {\n      const opts = input.options as {\n        url: string;\n        method?: \"GET\" | \"POST\";\n        data?: Record<string, string>;\n        headers?: Record<string, string>;\n        validKey?: string;\n        messageKey?: string;\n        cache?: boolean;\n      };\n\n      const cacheKey = `${opts.url}|${input.value}`;\n      if (opts.cache && cache.has(cacheKey)) {\n        return cache.get(cacheKey)!;\n      }\n\n      const method = opts.method ?? \"GET\";\n      const validKey = opts.validKey ?? \"valid\";\n      const messageKey = opts.messageKey ?? \"message\";\n      const body: Record<string, string> = { [input.field]: input.value, ...opts.data };\n\n      let url = opts.url;\n      const fetchOpts: RequestInit = {\n        method,\n        headers: { \"Content-Type\": \"application/json\", ...opts.headers },\n      };\n\n      if (method === \"GET\") {\n        url = `${url}?${new URLSearchParams(body)}`;\n      } else {\n        fetchOpts.body = JSON.stringify(body);\n      }\n\n      let result: ValidatorResult;\n      try {\n        const res = await fetch(url, fetchOpts);\n        const json = (await res.json()) as Record<string, unknown>;\n        result = { valid: json[validKey] === true, message: json[messageKey] as string | undefined };\n      } catch {\n        result = { valid: false };\n      }\n\n      if (opts.cache) {\n        cache.set(cacheKey, result);\n      }\n      return result;\n    },\n  };\n};\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const base64: ValidatorFactory = () => ({\n  validate(input) {\n    return {\n      valid:\n        input.value === \"\" ||\n        /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{4})$/.test(\n          input.value,\n        ),\n    };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const hex: ValidatorFactory = () => ({\n  validate(input) {\n    return {\n      valid: input.value === \"\" || /^[0-9a-fA-F]+$/.test(input.value),\n    };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const mac: ValidatorFactory = () => ({\n  validate(input) {\n    return {\n      valid:\n        input.value === \"\" ||\n        /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/.test(input.value) ||\n        /^([0-9A-Fa-f]{4}\\.){2}([0-9A-Fa-f]{4})$/.test(input.value),\n    };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const bic: ValidatorFactory = () => ({\n  validate(input) {\n    return {\n      valid: input.value === \"\" || /^[a-zA-Z]{6}[a-zA-Z0-9]{2}([a-zA-Z0-9]{3})?$/.test(input.value),\n    };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst PATTERNS: Record<string, RegExp> = {\n  \"3\": /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,\n  \"4\": /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  \"5\": /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,\n  all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i,\n};\n\nexport const uuid: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const version = input.options.version != null ? `${input.options.version}` : \"all\";\n    const pattern = PATTERNS[version] ?? PATTERNS.all;\n    return { valid: pattern.test(input.value) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\n// --- Shared algorithm helpers ---\n\nconst LUHN_TABLE = [\n  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n  [0, 2, 4, 6, 8, 1, 3, 5, 7, 9],\n];\n\nfunction luhn(value: string): boolean {\n  let mul = 0;\n  let sum = 0;\n  let length = value.length;\n  while (length--) {\n    sum += LUHN_TABLE[mul][Number.parseInt(value.charAt(length), 10)];\n    mul = 1 - mul;\n  }\n  return sum % 10 === 0 && sum > 0;\n}\n\n// ISO 7064 MOD 11,10\nfunction mod11And10(value: string): boolean {\n  const length = value.length;\n  let check = 5;\n  for (let i = 0; i < length; i++) {\n    check = ((((check || 10) * 2) % 11) + Number.parseInt(value.charAt(i), 10)) % 10;\n  }\n  return check === 1;\n}\n\n// ISO 7064 MOD 97,10 — letters A-Z become 10-35\nfunction mod97And10(input: string): boolean {\n  const digits = input\n    .split(\"\")\n    .map((c) => {\n      const code = c.charCodeAt(0);\n      return code >= 65 && code <= 90 ? code - 55 : c;\n    })\n    .join(\"\")\n    .split(\"\")\n    .map((c) => Number.parseInt(c, 10));\n  let temp = 0;\n  const len = digits.length;\n  for (let i = 0; i < len - 1; i++) {\n    temp = ((temp + digits[i]) * 10) % 97;\n  }\n  temp += digits[len - 1];\n  return temp % 97 === 1;\n}\n\nfunction isValidDate(year: number, month: number, day: number): boolean {\n  if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(day)) return false;\n  if (year < 1000 || year > 9999 || month <= 0 || month > 12) return false;\n  const numDays = [\n    31,\n    year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0) ? 29 : 28,\n    31,\n    30,\n    31,\n    30,\n    31,\n    31,\n    30,\n    31,\n    30,\n    31,\n  ];\n  return day >= 1 && day <= numDays[month - 1];\n}\n\n// --- Country helpers ---\n\nfunction arVat(value: string): boolean {\n  let v = value.replace(\"-\", \"\");\n  if (/^AR[0-9]{11}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{11}$/.test(v)) return false;\n  const weight = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];\n  let sum = 0;\n  for (let i = 0; i < 10; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  sum = 11 - (sum % 11);\n  if (sum === 11) sum = 0;\n  return `${sum}` === v.substr(10);\n}\n\nfunction atVat(value: string): boolean {\n  let v = value;\n  if (/^ATU[0-9]{8}$/.test(v)) v = v.substr(2);\n  if (!/^U[0-9]{8}$/.test(v)) return false;\n  v = v.substr(1);\n  const weight = [1, 2, 1, 2, 1, 2, 1];\n  let sum = 0;\n  for (let i = 0; i < 7; i++) {\n    let temp = Number.parseInt(v.charAt(i), 10) * weight[i];\n    if (temp > 9) temp = Math.floor(temp / 10) + (temp % 10);\n    sum += temp;\n  }\n  sum = 10 - ((sum + 4) % 10);\n  if (sum === 10) sum = 0;\n  return `${sum}` === v.substr(7, 1);\n}\n\nfunction beVat(value: string): boolean {\n  let v = value;\n  if (/^BE[0]?[0-9]{9}$/.test(v)) v = v.substr(2);\n  if (!/^[0]?[0-9]{9}$/.test(v)) return false;\n  if (v.length === 9) v = `0${v}`;\n  if (v.substr(1, 1) === \"0\") return false;\n  return (Number.parseInt(v.substr(0, 8), 10) + Number.parseInt(v.substr(8, 2), 10)) % 97 === 0;\n}\n\nfunction bgVat(value: string): boolean {\n  let v = value;\n  if (/^BG[0-9]{9,10}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{9,10}$/.test(v)) return false;\n\n  if (v.length === 9) {\n    // Legal entity\n    let sum = 0;\n    for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * (i + 1);\n    sum = sum % 11;\n    if (sum === 10) {\n      sum = 0;\n      for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * (i + 3);\n      sum = sum % 11;\n    }\n    sum = sum % 10;\n    return `${sum}` === v.substr(8);\n  }\n\n  // Physical: EGN\n  const isEgn = (inp: string): boolean => {\n    let year = Number.parseInt(inp.substr(0, 2), 10) + 1900;\n    let month = Number.parseInt(inp.substr(2, 2), 10);\n    const day = Number.parseInt(inp.substr(4, 2), 10);\n    if (month > 40) {\n      year += 100;\n      month -= 40;\n    } else if (month > 20) {\n      year -= 100;\n      month -= 20;\n    }\n    if (!isValidDate(year, month, day)) return false;\n    const weight = [2, 4, 8, 5, 10, 9, 7, 3, 6];\n    let s = 0;\n    for (let j = 0; j < 9; j++) s += Number.parseInt(inp.charAt(j), 10) * weight[j];\n    s = (s % 11) % 10;\n    return `${s}` === inp.substr(9, 1);\n  };\n\n  // Physical: PNF (foreigner)\n  const isPnf = (inp: string): boolean => {\n    const weight = [21, 19, 17, 13, 11, 9, 7, 3, 1];\n    let s = 0;\n    for (let j = 0; j < 9; j++) s += Number.parseInt(inp.charAt(j), 10) * weight[j];\n    s = s % 10;\n    return `${s}` === inp.substr(9, 1);\n  };\n\n  // Physical: VAT fallback\n  const isBgVat = (inp: string): boolean => {\n    const weight = [4, 3, 2, 7, 6, 5, 4, 3, 2];\n    let s = 0;\n    for (let j = 0; j < 9; j++) s += Number.parseInt(inp.charAt(j), 10) * weight[j];\n    s = 11 - (s % 11);\n    if (s === 10) return false;\n    if (s === 11) s = 0;\n    return `${s}` === inp.substr(9, 1);\n  };\n\n  return isEgn(v) || isPnf(v) || isBgVat(v);\n}\n\nfunction brVat(value: string): boolean {\n  if (value === \"\") return true;\n  const cnpj = value.replace(/[^\\d]+/g, \"\");\n  if (cnpj === \"\" || cnpj.length !== 14) return false;\n  // All-same digits invalid\n  if (/^(\\d)\\1{13}$/.test(cnpj)) return false;\n  let length = cnpj.length - 2;\n  let numbers = cnpj.substring(0, length);\n  const digits = cnpj.substring(length);\n  let sum = 0;\n  let pos = length - 7;\n  for (let i = length; i >= 1; i--) {\n    sum += Number.parseInt(numbers.charAt(length - i), 10) * pos--;\n    if (pos < 2) pos = 9;\n  }\n  let result = sum % 11 < 2 ? 0 : 11 - (sum % 11);\n  if (result !== Number.parseInt(digits.charAt(0), 10)) return false;\n  length = length + 1;\n  numbers = cnpj.substring(0, length);\n  sum = 0;\n  pos = length - 7;\n  for (let i = length; i >= 1; i--) {\n    sum += Number.parseInt(numbers.charAt(length - i), 10) * pos--;\n    if (pos < 2) pos = 9;\n  }\n  result = sum % 11 < 2 ? 0 : 11 - (sum % 11);\n  return result === Number.parseInt(digits.charAt(1), 10);\n}\n\nfunction chVat(value: string): boolean {\n  let v = value;\n  if (/^CHE[0-9]{9}(MWST|TVA|IVA|TPV)?$/.test(v)) v = v.substr(2);\n  if (!/^E[0-9]{9}(MWST|TVA|IVA|TPV)?$/.test(v)) return false;\n  v = v.substr(1);\n  const weight = [5, 4, 3, 2, 7, 6, 5, 4];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  sum = 11 - (sum % 11);\n  if (sum === 10) return false;\n  if (sum === 11) sum = 0;\n  return `${sum}` === v.substr(8, 1);\n}\n\nfunction cyVat(value: string): boolean {\n  let v = value;\n  if (/^CY[0-5|9][0-9]{7}[A-Z]$/.test(v)) v = v.substr(2);\n  if (!/^[0-5|9][0-9]{7}[A-Z]$/.test(v)) return false;\n  if (v.substr(0, 2) === \"12\") return false;\n  const translation: Record<string, number> = {\n    \"0\": 1,\n    \"1\": 0,\n    \"2\": 5,\n    \"3\": 7,\n    \"4\": 9,\n    \"5\": 13,\n    \"6\": 15,\n    \"7\": 17,\n    \"8\": 19,\n    \"9\": 21,\n  };\n  let sum = 0;\n  for (let i = 0; i < 8; i++) {\n    let temp = Number.parseInt(v.charAt(i), 10);\n    if (i % 2 === 0) temp = translation[`${temp}`];\n    sum += temp;\n  }\n  return `${\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"[sum % 26]}` === v.substr(8, 1);\n}\n\nfunction czVat(value: string): boolean {\n  let v = value;\n  if (/^CZ[0-9]{8,10}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{8,10}$/.test(v)) return false;\n\n  if (v.length === 8) {\n    if (v.charAt(0) === \"9\") return false;\n    let sum = 0;\n    for (let i = 0; i < 7; i++) sum += Number.parseInt(v.charAt(i), 10) * (8 - i);\n    sum = 11 - (sum % 11);\n    if (sum === 10) sum = 0;\n    if (sum === 11) sum = 1;\n    return `${sum}` === v.substr(7, 1);\n  }\n\n  if (v.length === 9 && v.charAt(0) === \"6\") {\n    let sum = 0;\n    for (let i = 0; i < 7; i++) sum += Number.parseInt(v.charAt(i + 1), 10) * (8 - i);\n    sum = 11 - (sum % 11);\n    if (sum === 10) sum = 0;\n    if (sum === 11) sum = 1;\n    sum = [8, 7, 6, 5, 4, 3, 2, 1, 0, 9, 10][sum - 1];\n    return `${sum}` === v.substr(8, 1);\n  }\n\n  if (v.length === 9 || v.length === 10) {\n    let year = 1900 + Number.parseInt(v.substr(0, 2), 10);\n    const month = (Number.parseInt(v.substr(2, 2), 10) % 50) % 20;\n    const day = Number.parseInt(v.substr(4, 2), 10);\n    if (v.length === 9) {\n      if (year >= 1980) year -= 100;\n      if (year > 1953) return false;\n    } else if (year < 1954) {\n      year += 100;\n    }\n    if (!isValidDate(year, month, day)) return false;\n    if (v.length === 10) {\n      let check = Number.parseInt(v.substr(0, 9), 10) % 11;\n      if (year < 1985) check = check % 10;\n      return `${check}` === v.substr(9, 1);\n    }\n    return true;\n  }\n\n  return false;\n}\n\nfunction deVat(value: string): boolean {\n  let v = value;\n  if (/^DE[0-9]{9}$/.test(v)) v = v.substr(2);\n  if (!/^[1-9][0-9]{8}$/.test(v)) return false;\n  return mod11And10(v);\n}\n\nfunction dkVat(value: string): boolean {\n  let v = value;\n  if (/^DK[0-9]{8}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{8}$/.test(v)) return false;\n  const weight = [2, 7, 6, 5, 4, 3, 2, 1];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  return sum % 11 === 0;\n}\n\nfunction eeVat(value: string): boolean {\n  let v = value;\n  if (/^EE[0-9]{9}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{9}$/.test(v)) return false;\n  const weight = [3, 7, 1, 3, 7, 1, 3, 7, 1];\n  let sum = 0;\n  for (let i = 0; i < 9; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  return sum % 10 === 0;\n}\n\nfunction esVat(value: string): boolean {\n  let v = value;\n  if (/^ES[0-9A-Z][0-9]{7}[0-9A-Z]$/.test(v)) v = v.substr(2);\n  if (!/^[0-9A-Z][0-9]{7}[0-9A-Z]$/.test(v)) return false;\n\n  const dni = (inp: string): boolean => {\n    const check = Number.parseInt(inp.substr(0, 8), 10);\n    return `${\"TRWAGMYFPDXBNJZSQVHLCKE\"[check % 23]}` === inp.substr(8, 1);\n  };\n\n  const nie = (inp: string): boolean => {\n    const check = [\"XYZ\".indexOf(inp.charAt(0)), inp.substr(1)].join(\"\");\n    const cd = \"TRWAGMYFPDXBNJZSQVHLCKE\"[Number.parseInt(check, 10) % 23];\n    return `${cd}` === inp.substr(8, 1);\n  };\n\n  const cif = (inp: string): boolean => {\n    const firstChar = inp.charAt(0);\n    if (\"KLM\".indexOf(firstChar) !== -1) {\n      const check = Number.parseInt(inp.substr(1, 8), 10);\n      return `${\"TRWAGMYFPDXBNJZSQVHLCKE\"[check % 23]}` === inp.substr(8, 1);\n    }\n    if (\"ABCDEFGHJNPQRSUVW\".indexOf(firstChar) !== -1) {\n      const weight = [2, 1, 2, 1, 2, 1, 2];\n      let sum = 0;\n      for (let i = 0; i < 7; i++) {\n        let temp = Number.parseInt(inp.charAt(i + 1), 10) * weight[i];\n        if (temp > 9) temp = Math.floor(temp / 10) + (temp % 10);\n        sum += temp;\n      }\n      sum = 10 - (sum % 10);\n      if (sum === 10) sum = 0;\n      return `${sum}` === inp.substr(8, 1) || \"JABCDEFGHI\"[sum] === inp.substr(8, 1);\n    }\n    return false;\n  };\n\n  const first = v.charAt(0);\n  if (/^[0-9]$/.test(first)) return dni(v);\n  if (/^[XYZ]$/.test(first)) return nie(v);\n  return cif(v);\n}\n\nfunction fiVat(value: string): boolean {\n  let v = value;\n  if (/^FI[0-9]{8}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{8}$/.test(v)) return false;\n  const weight = [7, 9, 10, 5, 8, 4, 2, 1];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  return sum % 11 === 0;\n}\n\nfunction frVat(value: string): boolean {\n  let v = value;\n  if (/^FR[0-9A-Z]{2}[0-9]{9}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9A-Z]{2}[0-9]{9}$/.test(v)) return false;\n  if (v.substr(2, 4) !== \"000\") {\n    return luhn(v.substr(2));\n  }\n  if (/^[0-9]{2}$/.test(v.substr(0, 2))) {\n    return v.substr(0, 2) === `${Number.parseInt(`${v.substr(2)}12`, 10) % 97}`;\n  }\n  const alphabet = \"0123456789ABCDEFGHJKLMNPQRSTUVWXYZ\";\n  let check: number;\n  if (/^[0-9]$/.test(v.charAt(0))) {\n    check = alphabet.indexOf(v.charAt(0)) * 24 + alphabet.indexOf(v.charAt(1)) - 10;\n  } else {\n    check = alphabet.indexOf(v.charAt(0)) * 34 + alphabet.indexOf(v.charAt(1)) - 100;\n  }\n  return (Number.parseInt(v.substr(2), 10) + 1 + Math.floor(check / 11)) % 11 === check % 11;\n}\n\nfunction gbVat(value: string): boolean {\n  let v = value;\n  if (\n    /^GB[0-9]{9}$/.test(v) ||\n    /^GB[0-9]{12}$/.test(v) ||\n    /^GBGD[0-9]{3}$/.test(v) ||\n    /^GBHA[0-9]{3}$/.test(v) ||\n    /^GB(GD|HA)8888[0-9]{5}$/.test(v)\n  ) {\n    v = v.substr(2);\n  }\n  if (\n    !/^[0-9]{9}$/.test(v) &&\n    !/^[0-9]{12}$/.test(v) &&\n    !/^GD[0-9]{3}$/.test(v) &&\n    !/^HA[0-9]{3}$/.test(v) &&\n    !/^(GD|HA)8888[0-9]{5}$/.test(v)\n  ) {\n    return false;\n  }\n  const length = v.length;\n  if (length === 5) {\n    const firstTwo = v.substr(0, 2);\n    const lastThree = Number.parseInt(v.substr(2), 10);\n    return (\"GD\" === firstTwo && lastThree < 500) || (\"HA\" === firstTwo && lastThree >= 500);\n  }\n  if (length === 11 && (\"GD8888\" === v.substr(0, 6) || \"HA8888\" === v.substr(0, 6))) {\n    if (\n      (\"GD\" === v.substr(0, 2) && Number.parseInt(v.substr(6, 3), 10) >= 500) ||\n      (\"HA\" === v.substr(0, 2) && Number.parseInt(v.substr(6, 3), 10) < 500)\n    ) {\n      return false;\n    }\n    return Number.parseInt(v.substr(6, 3), 10) % 97 === Number.parseInt(v.substr(9, 2), 10);\n  }\n  if (length === 9 || length === 12) {\n    const weight = [8, 7, 6, 5, 4, 3, 2, 10, 1];\n    let sum = 0;\n    for (let i = 0; i < 9; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n    sum = sum % 97;\n    return Number.parseInt(v.substr(0, 3), 10) >= 100\n      ? sum === 0 || sum === 42 || sum === 55\n      : sum === 0;\n  }\n  return true;\n}\n\nfunction grVat(value: string): boolean {\n  let v = value;\n  if (/^(GR|EL)[0-9]{9}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{9}$/.test(v)) return false;\n  if (v.length === 8) v = `0${v}`;\n  const weight = [256, 128, 64, 32, 16, 8, 4, 2];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  sum = (sum % 11) % 10;\n  return `${sum}` === v.substr(8, 1);\n}\n\nfunction hrVat(value: string): boolean {\n  let v = value;\n  if (/^HR[0-9]{11}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{11}$/.test(v)) return false;\n  return mod11And10(v);\n}\n\nfunction huVat(value: string): boolean {\n  let v = value;\n  if (/^HU[0-9]{8}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{8}$/.test(v)) return false;\n  const weight = [9, 7, 3, 1, 9, 7, 3, 1];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  return sum % 10 === 0;\n}\n\nfunction ieVat(value: string): boolean {\n  let v = value;\n  if (/^IE[0-9][0-9A-Z*+][0-9]{5}[A-Z]{1,2}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9][0-9A-Z*+][0-9]{5}[A-Z]{1,2}$/.test(v)) return false;\n\n  const getCheckDigit = (inp: string): string => {\n    let input = inp;\n    while (input.length < 7) input = `0${input}`;\n    const alphabet = \"WABCDEFGHIJKLMNOPQRSTUV\";\n    let sum = 0;\n    for (let i = 0; i < 7; i++) sum += Number.parseInt(input.charAt(i), 10) * (8 - i);\n    sum += 9 * alphabet.indexOf(input.substr(7));\n    return alphabet[sum % 23];\n  };\n\n  if (/^[0-9]+$/.test(v.substr(0, 7))) {\n    return v.charAt(7) === getCheckDigit(`${v.substr(0, 7)}${v.substr(8)}`);\n  }\n  if (\"ABCDEFGHIJKLMNOPQRSTUVWXYZ+*\".indexOf(v.charAt(1)) !== -1) {\n    return v.charAt(7) === getCheckDigit(`${v.substr(2, 5)}${v.substr(0, 1)}`);\n  }\n  return true;\n}\n\nfunction isVat(value: string): boolean {\n  let v = value;\n  if (/^IS[0-9]{5,6}$/.test(v)) v = v.substr(2);\n  return /^[0-9]{5,6}$/.test(v);\n}\n\nfunction itVat(value: string): boolean {\n  let v = value;\n  if (/^IT[0-9]{11}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{11}$/.test(v)) return false;\n  if (Number.parseInt(v.substr(0, 7), 10) === 0) return false;\n  const lastThree = Number.parseInt(v.substr(7, 3), 10);\n  if (lastThree < 1 || (lastThree > 201 && lastThree !== 999 && lastThree !== 888)) return false;\n  return luhn(v);\n}\n\nfunction ltVat(value: string): boolean {\n  let v = value;\n  if (/^LT([0-9]{7}1[0-9]|[0-9]{10}1[0-9])$/.test(v)) v = v.substr(2);\n  if (!/^([0-9]{7}1[0-9]|[0-9]{10}1[0-9])$/.test(v)) return false;\n  const length = v.length;\n  let sum = 0;\n  for (let i = 0; i < length - 1; i++) sum += Number.parseInt(v.charAt(i), 10) * (1 + (i % 9));\n  let check = sum % 11;\n  if (check === 10) {\n    sum = 0;\n    for (let i = 0; i < length - 1; i++)\n      sum += Number.parseInt(v.charAt(i), 10) * (1 + ((i + 2) % 9));\n  }\n  check = (check % 11) % 10;\n  return `${check}` === v.charAt(length - 1);\n}\n\nfunction luVat(value: string): boolean {\n  let v = value;\n  if (/^LU[0-9]{8}$/.test(v)) v = v.substring(2);\n  if (!/^[0-9]{8}$/.test(v)) return false;\n  return Number.parseInt(v.substring(0, 6), 10) % 89 === Number.parseInt(v.substring(6, 8), 10);\n}\n\nfunction lvVat(value: string): boolean {\n  let v = value;\n  if (/^LV[0-9]{11}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{11}$/.test(v)) return false;\n  const first = Number.parseInt(v.charAt(0), 10);\n  const length = v.length;\n  if (first > 3) {\n    // Legal entity\n    const weight = [9, 1, 4, 8, 3, 10, 2, 5, 7, 6, 1];\n    let sum = 0;\n    for (let i = 0; i < length; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n    return sum % 11 === 3;\n  }\n  // Personal code (birth date based)\n  const day = Number.parseInt(v.substr(0, 2), 10);\n  const month = Number.parseInt(v.substr(2, 2), 10);\n  let year = Number.parseInt(v.substr(4, 2), 10);\n  year = year + 1800 + Number.parseInt(v.charAt(6), 10) * 100;\n  if (!isValidDate(year, month, day)) return false;\n  const weight = [10, 5, 8, 4, 2, 1, 6, 3, 7, 9];\n  let sum = 0;\n  for (let i = 0; i < length - 1; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  sum = ((sum + 1) % 11) % 10;\n  return `${sum}` === v.charAt(length - 1);\n}\n\nfunction mtVat(value: string): boolean {\n  let v = value;\n  if (/^MT[0-9]{8}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{8}$/.test(v)) return false;\n  const weight = [3, 4, 6, 7, 8, 9, 10, 1];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  return sum % 37 === 0;\n}\n\nfunction nlId(value: string): boolean {\n  if (value.length < 8) return false;\n  let v = value;\n  if (v.length === 8) v = `0${v}`;\n  if (!/^[0-9]{4}[.]{0,1}[0-9]{2}[.]{0,1}[0-9]{3}$/.test(v)) return false;\n  v = v.replace(/\\./g, \"\");\n  if (Number.parseInt(v, 10) === 0) return false;\n  let sum = 0;\n  const length = v.length;\n  for (let i = 0; i < length - 1; i++) sum += (9 - i) * Number.parseInt(v.charAt(i), 10);\n  sum = sum % 11;\n  if (sum === 10) sum = 0;\n  return `${sum}` === v.charAt(length - 1);\n}\n\nfunction nlVat(value: string): boolean {\n  let v = value;\n  if (/^NL[0-9]{9}B[0-9]{2}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{9}B[0-9]{2}$/.test(v)) return false;\n  const id = v.substr(0, 9);\n  return nlId(id) || mod97And10(`NL${v}`);\n}\n\nfunction noVat(value: string): boolean {\n  let v = value;\n  if (/^NO[0-9]{9}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{9}$/.test(v)) return false;\n  const weight = [3, 2, 7, 6, 5, 4, 3, 2];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  sum = 11 - (sum % 11);\n  if (sum === 11) sum = 0;\n  return `${sum}` === v.substr(8, 1);\n}\n\nfunction plVat(value: string): boolean {\n  let v = value;\n  if (/^PL[0-9]{10}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{10}$/.test(v)) return false;\n  const weight = [6, 5, 7, 2, 3, 4, 5, 6, 7, -1];\n  let sum = 0;\n  for (let i = 0; i < 10; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  return sum % 11 === 0;\n}\n\nfunction ptVat(value: string): boolean {\n  let v = value;\n  if (/^PT[0-9]{9}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{9}$/.test(v)) return false;\n  const weight = [9, 8, 7, 6, 5, 4, 3, 2];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  sum = 11 - (sum % 11);\n  if (sum > 9) sum = 0;\n  return `${sum}` === v.substr(8, 1);\n}\n\nfunction roVat(value: string): boolean {\n  let v = value;\n  if (/^RO[1-9][0-9]{1,9}$/.test(v)) v = v.substr(2);\n  if (!/^[1-9][0-9]{1,9}$/.test(v)) return false;\n  const length = v.length;\n  const weight = [7, 5, 3, 2, 1, 7, 5, 3, 2].slice(10 - length);\n  let sum = 0;\n  for (let i = 0; i < length - 1; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  sum = ((10 * sum) % 11) % 10;\n  return `${sum}` === v.substr(length - 1, 1);\n}\n\nfunction rsVat(value: string): boolean {\n  let v = value;\n  if (/^RS[0-9]{9}$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{9}$/.test(v)) return false;\n  let sum = 10;\n  for (let i = 0; i < 8; i++) {\n    let temp = (Number.parseInt(v.charAt(i), 10) + sum) % 10;\n    if (temp === 0) temp = 10;\n    sum = (2 * temp) % 11;\n  }\n  return (sum + Number.parseInt(v.substr(8, 1), 10)) % 10 === 1;\n}\n\nfunction ruVat(value: string): boolean {\n  let v = value;\n  if (/^RU([0-9]{10}|[0-9]{12})$/.test(v)) v = v.substr(2);\n  if (!/^([0-9]{10}|[0-9]{12})$/.test(v)) return false;\n\n  if (v.length === 10) {\n    const weight = [2, 4, 10, 3, 5, 9, 4, 6, 8, 0];\n    let sum = 0;\n    for (let i = 0; i < 10; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n    sum = sum % 11;\n    if (sum > 9) sum = sum % 10;\n    return `${sum}` === v.substr(9, 1);\n  }\n\n  // 12 digits\n  const weight1 = [7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0];\n  const weight2 = [3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0];\n  let sum1 = 0;\n  let sum2 = 0;\n  for (let i = 0; i < 11; i++) {\n    sum1 += Number.parseInt(v.charAt(i), 10) * weight1[i];\n    sum2 += Number.parseInt(v.charAt(i), 10) * weight2[i];\n  }\n  sum1 = sum1 % 11;\n  if (sum1 > 9) sum1 = sum1 % 10;\n  sum2 = sum2 % 11;\n  if (sum2 > 9) sum2 = sum2 % 10;\n  return `${sum1}` === v.substr(10, 1) && `${sum2}` === v.substr(11, 1);\n}\n\nfunction seVat(value: string): boolean {\n  let v = value;\n  if (/^SE[0-9]{10}01$/.test(v)) v = v.substr(2);\n  if (!/^[0-9]{10}01$/.test(v)) return false;\n  v = v.substr(0, 10);\n  return luhn(v);\n}\n\nfunction siVat(value: string): boolean {\n  const res = value.match(/^(SI)?([1-9][0-9]{7})$/);\n  if (!res) return false;\n  const v = res[1] ? value.substr(2) : value;\n  const weight = [8, 7, 6, 5, 4, 3, 2];\n  let sum = 0;\n  for (let i = 0; i < 7; i++) sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  sum = 11 - (sum % 11);\n  if (sum === 10) sum = 0;\n  return `${sum}` === v.substr(7, 1);\n}\n\nfunction skVat(value: string): boolean {\n  let v = value;\n  if (/^SK[1-9][0-9][(2-4)|(6-9)][0-9]{7}$/.test(v)) v = v.substr(2);\n  if (!/^[1-9][0-9][(2-4)|(6-9)][0-9]{7}$/.test(v)) return false;\n  return Number.parseInt(v, 10) % 11 === 0;\n}\n\nfunction veVat(value: string): boolean {\n  let v = value;\n  if (/^VE[VEJPG][0-9]{9}$/.test(v)) v = v.substr(2);\n  if (!/^[VEJPG][0-9]{9}$/.test(v)) return false;\n  const types: Record<string, number> = { E: 8, G: 20, J: 12, P: 16, V: 4 };\n  const weight = [3, 2, 7, 6, 5, 4, 3, 2];\n  let sum = types[v.charAt(0)];\n  for (let i = 0; i < 8; i++) sum += Number.parseInt(v.charAt(i + 1), 10) * weight[i];\n  sum = 11 - (sum % 11);\n  if (sum === 11 || sum === 10) sum = 0;\n  return `${sum}` === v.substr(9, 1);\n}\n\nfunction zaVat(value: string): boolean {\n  let v = value;\n  if (/^ZA4[0-9]{9}$/.test(v)) v = v.substr(2);\n  return /^4[0-9]{9}$/.test(v);\n}\n\n// --- Country code set ---\nconst COUNTRY_CODES = new Set([\n  \"AR\",\n  \"AT\",\n  \"BE\",\n  \"BG\",\n  \"BR\",\n  \"CH\",\n  \"CY\",\n  \"CZ\",\n  \"DE\",\n  \"DK\",\n  \"EE\",\n  \"EL\",\n  \"ES\",\n  \"FI\",\n  \"FR\",\n  \"GB\",\n  \"GR\",\n  \"HR\",\n  \"HU\",\n  \"IE\",\n  \"IS\",\n  \"IT\",\n  \"LT\",\n  \"LU\",\n  \"LV\",\n  \"MT\",\n  \"NL\",\n  \"NO\",\n  \"PL\",\n  \"PT\",\n  \"RO\",\n  \"RS\",\n  \"RU\",\n  \"SE\",\n  \"SI\",\n  \"SK\",\n  \"VE\",\n  \"ZA\",\n]);\n\nexport const vat: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const country = ((input.options.country as string | undefined) || \"\").toUpperCase();\n    if (!country || !COUNTRY_CODES.has(country)) return { valid: true };\n    switch (country) {\n      case \"AR\":\n        return { valid: arVat(input.value) };\n      case \"AT\":\n        return { valid: atVat(input.value) };\n      case \"BE\":\n        return { valid: beVat(input.value) };\n      case \"BG\":\n        return { valid: bgVat(input.value) };\n      case \"BR\":\n        return { valid: brVat(input.value) };\n      case \"CH\":\n        return { valid: chVat(input.value) };\n      case \"CY\":\n        return { valid: cyVat(input.value) };\n      case \"CZ\":\n        return { valid: czVat(input.value) };\n      case \"DE\":\n        return { valid: deVat(input.value) };\n      case \"DK\":\n        return { valid: dkVat(input.value) };\n      case \"EE\":\n        return { valid: eeVat(input.value) };\n      case \"EL\":\n        return { valid: grVat(input.value) };\n      case \"ES\":\n        return { valid: esVat(input.value) };\n      case \"FI\":\n        return { valid: fiVat(input.value) };\n      case \"FR\":\n        return { valid: frVat(input.value) };\n      case \"GB\":\n        return { valid: gbVat(input.value) };\n      case \"GR\":\n        return { valid: grVat(input.value) };\n      case \"HR\":\n        return { valid: hrVat(input.value) };\n      case \"HU\":\n        return { valid: huVat(input.value) };\n      case \"IE\":\n        return { valid: ieVat(input.value) };\n      case \"IS\":\n        return { valid: isVat(input.value) };\n      case \"IT\":\n        return { valid: itVat(input.value) };\n      case \"LT\":\n        return { valid: ltVat(input.value) };\n      case \"LU\":\n        return { valid: luVat(input.value) };\n      case \"LV\":\n        return { valid: lvVat(input.value) };\n      case \"MT\":\n        return { valid: mtVat(input.value) };\n      case \"NL\":\n        return { valid: nlVat(input.value) };\n      case \"NO\":\n        return { valid: noVat(input.value) };\n      case \"PL\":\n        return { valid: plVat(input.value) };\n      case \"PT\":\n        return { valid: ptVat(input.value) };\n      case \"RO\":\n        return { valid: roVat(input.value) };\n      case \"RS\":\n        return { valid: rsVat(input.value) };\n      case \"RU\":\n        return { valid: ruVat(input.value) };\n      case \"SE\":\n        return { valid: seVat(input.value) };\n      case \"SI\":\n        return { valid: siVat(input.value) };\n      case \"SK\":\n        return { valid: skVat(input.value) };\n      case \"VE\":\n        return { valid: veVat(input.value) };\n      case \"ZA\":\n        return { valid: zaVat(input.value) };\n      default:\n        return { valid: true };\n    }\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\n// --- Inlined algorithm helpers ---\n\nconst LUHN_TABLE = [\n  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n  [0, 2, 4, 6, 8, 1, 3, 5, 7, 9],\n];\n\nfunction luhn(value: string): boolean {\n  let mul = 0;\n  let sum = 0;\n  let length = value.length;\n  while (length--) {\n    sum += LUHN_TABLE[mul][Number.parseInt(value.charAt(length), 10)];\n    mul = 1 - mul;\n  }\n  return sum % 10 === 0 && sum > 0;\n}\n\nfunction mod11And10(value: string): boolean {\n  const length = value.length;\n  let check = 5;\n  for (let i = 0; i < length; i++) {\n    check = ((((check || 10) * 2) % 11) + Number.parseInt(value.charAt(i), 10)) % 10;\n  }\n  return check === 1;\n}\n\nfunction isValidDate(year: number, month: number, day: number, _allowFuture = false): boolean {\n  if (Number.isNaN(year) || Number.isNaN(month) || Number.isNaN(day)) return false;\n  if (year < 1 || month <= 0 || month > 12) return false;\n  const numDays = [\n    31,\n    year % 400 === 0 || (year % 100 !== 0 && year % 4 === 0) ? 29 : 28,\n    31,\n    30,\n    31,\n    30,\n    31,\n    31,\n    30,\n    31,\n    30,\n    31,\n  ];\n  return day >= 1 && day <= numDays[month - 1];\n}\n\n// Verhoeff algorithm (Dihedral group D5)\nconst VERHOEFF_D = [\n  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n  [1, 2, 3, 4, 0, 6, 7, 8, 9, 5],\n  [2, 3, 4, 0, 1, 7, 8, 9, 5, 6],\n  [3, 4, 0, 1, 2, 8, 9, 5, 6, 7],\n  [4, 0, 1, 2, 3, 9, 5, 6, 7, 8],\n  [5, 9, 8, 7, 6, 0, 4, 3, 2, 1],\n  [6, 5, 9, 8, 7, 1, 0, 4, 3, 2],\n  [7, 6, 5, 9, 8, 2, 1, 0, 4, 3],\n  [8, 7, 6, 5, 9, 3, 2, 1, 0, 4],\n  [9, 8, 7, 6, 5, 4, 3, 2, 1, 0],\n];\n\nconst VERHOEFF_P = [\n  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n  [1, 5, 7, 6, 2, 8, 3, 0, 9, 4],\n  [5, 8, 0, 3, 7, 9, 6, 1, 4, 2],\n  [8, 9, 1, 6, 0, 4, 3, 5, 2, 7],\n  [9, 4, 5, 3, 1, 2, 6, 8, 7, 0],\n  [4, 2, 8, 6, 5, 7, 3, 9, 0, 1],\n  [2, 7, 9, 3, 8, 0, 6, 4, 1, 5],\n  [7, 0, 4, 6, 9, 1, 3, 2, 5, 8],\n];\n\nfunction verhoeff(digits: number[]): boolean {\n  const inverted = [...digits].reverse();\n  let c = 0;\n  for (let i = 0; i < inverted.length; i++) {\n    c = VERHOEFF_D[c][VERHOEFF_P[i % 8][inverted[i]]];\n  }\n  return c === 0;\n}\n\n// --- JMBG shared helper (BA, ME, MK, RS, SI) ---\n\nfunction jmbg(value: string, countryCode: string): boolean {\n  if (!/^\\d{13}$/.test(value)) return false;\n  const day = Number.parseInt(value.substr(0, 2), 10);\n  const month = Number.parseInt(value.substr(2, 2), 10);\n  const rr = Number.parseInt(value.substr(7, 2), 10);\n  const k = Number.parseInt(value.substr(12, 1), 10);\n  if (day > 31 || month > 12) return false;\n  let sum = 0;\n  for (let i = 0; i < 6; i++) {\n    sum +=\n      (7 - i) * (Number.parseInt(value.charAt(i), 10) + Number.parseInt(value.charAt(i + 6), 10));\n  }\n  sum = 11 - (sum % 11);\n  if (sum === 10 || sum === 11) sum = 0;\n  if (sum !== k) return false;\n  switch (countryCode.toUpperCase()) {\n    case \"BA\":\n      return 10 <= rr && rr <= 19;\n    case \"MK\":\n      return 41 <= rr && rr <= 49;\n    case \"ME\":\n      return 20 <= rr && rr <= 29;\n    case \"RS\":\n      return 70 <= rr && rr <= 99;\n    case \"SI\":\n      return 50 <= rr && rr <= 59;\n    default:\n      return true;\n  }\n}\n\n// --- Country helpers ---\n\nfunction arId(value: string): boolean {\n  const v = value.replace(/\\./g, \"\");\n  return /^\\d{7,8}$/.test(v);\n}\n\nfunction bgId(value: string): boolean {\n  if (!/^\\d{10}$/.test(value)) return false;\n  let month = Number.parseInt(value.substr(2, 2), 10);\n  const day = Number.parseInt(value.substr(4, 2), 10);\n  let year = Number.parseInt(value.substr(0, 2), 10);\n  if (month > 40) {\n    month -= 40;\n    year += 2000;\n  } else if (month > 20) {\n    month -= 20;\n    year += 1800;\n  } else {\n    year += 1900;\n  }\n  if (!isValidDate(year, month, day)) return false;\n  const weight = [2, 4, 8, 5, 10, 9, 7, 3, 6];\n  let sum = 0;\n  for (let i = 0; i < 9; i++) {\n    sum += Number.parseInt(value.charAt(i), 10) * weight[i];\n  }\n  return (sum % 11) % 10 === Number.parseInt(value.charAt(9), 10);\n}\n\nfunction brId(value: string): boolean {\n  const v = value.replace(/[^\\d]/g, \"\");\n  if (!/^\\d{11}$/.test(v)) return false;\n  if (/^(.)\\1{10}$/.test(v)) return false;\n  let sum = 0;\n  for (let i = 0; i < 9; i++) {\n    sum += Number.parseInt(v.charAt(i), 10) * (10 - i);\n  }\n  let remainder = 11 - (sum % 11);\n  if (remainder === 10 || remainder === 11) remainder = 0;\n  if (remainder !== Number.parseInt(v.charAt(9), 10)) return false;\n  sum = 0;\n  for (let i = 0; i < 10; i++) {\n    sum += Number.parseInt(v.charAt(i), 10) * (11 - i);\n  }\n  remainder = 11 - (sum % 11);\n  if (remainder === 10 || remainder === 11) remainder = 0;\n  return remainder === Number.parseInt(v.charAt(10), 10);\n}\n\nfunction chId(value: string): boolean {\n  if (!/^756[.]{0,1}[0-9]{4}[.]{0,1}[0-9]{4}[.]{0,1}[0-9]{2}$/.test(value)) return false;\n  const v = value.replace(/\\D/g, \"\").substr(3);\n  const length = v.length;\n  const weight = length === 8 ? [3, 1] : [1, 3];\n  let sum = 0;\n  for (let i = 0; i < length - 1; i++) {\n    sum += Number.parseInt(v.charAt(i), 10) * weight[i % 2];\n  }\n  sum = 10 - (sum % 10);\n  return `${sum}` === v.charAt(length - 1);\n}\n\nfunction clId(value: string): boolean {\n  if (!/^\\d{7,8}[-]?[0-9Kk]$/.test(value)) return false;\n  const v = value.replace(\"-\", \"\").toUpperCase();\n  const digits = v.slice(0, -1);\n  const checkChar = v.slice(-1);\n  const weight = [3, 2, 7, 6, 5, 4, 3, 2];\n  let sum = 0;\n  for (let i = 0; i < digits.length; i++) {\n    sum += Number.parseInt(digits.charAt(i), 10) * weight[weight.length - digits.length + i];\n  }\n  const mod = 11 - (sum % 11);\n  let expected: string;\n  if (mod === 11) expected = \"0\";\n  else if (mod === 10) expected = \"K\";\n  else expected = `${mod}`;\n  return expected === checkChar;\n}\n\nfunction cnId(value: string): boolean {\n  const v = value.trim();\n  if (!/^\\d{15}$/.test(v) && !/^\\d{17}[\\dXx]{1}$/.test(v)) return false;\n  const adminDivisionCodes: Record<number, Record<number, (number | [number, number])[]>> = {\n    11: {\n      0: [0],\n      1: [\n        [0, 9],\n        [11, 17],\n      ],\n      2: [0, 28, 29],\n    },\n    12: { 0: [0], 1: [[0, 16]], 2: [0, 21, 23, 25] },\n    13: {\n      0: [0],\n      1: [[0, 5], 7, 8, 21, [23, 33], [81, 85]],\n      2: [[0, 5], [7, 9], [23, 25], 27, 29, 30, 81, 83],\n      3: [\n        [0, 4],\n        [21, 24],\n      ],\n      4: [[0, 4], 6, 21, [23, 35], 81],\n      5: [[0, 3], [21, 35], 81, 82],\n      6: [\n        [0, 4],\n        [21, 38],\n        [81, 84],\n      ],\n      7: [[0, 3], 5, 6, [21, 33]],\n      8: [\n        [0, 4],\n        [21, 28],\n      ],\n      9: [\n        [0, 3],\n        [21, 30],\n        [81, 84],\n      ],\n      10: [[0, 3], [22, 26], 28, 81, 82],\n      11: [[0, 2], [21, 28], 81, 82],\n    },\n    14: {\n      0: [0],\n      1: [0, 1, [5, 10], [21, 23], 81],\n      2: [[0, 3], 11, 12, [21, 27]],\n      3: [[0, 3], 11, 21, 22],\n      4: [[0, 2], 11, 21, [23, 31], 81],\n      5: [[0, 2], 21, 22, 24, 25, 81],\n      6: [\n        [0, 3],\n        [21, 24],\n      ],\n      7: [[0, 2], [21, 29], 81],\n      8: [[0, 2], [21, 30], 81, 82],\n      9: [[0, 2], [21, 32], 81],\n      10: [[0, 2], [21, 34], 81, 82],\n      11: [[0, 2], [21, 30], 81, 82],\n      23: [[0, 3], 22, 23, [25, 30], 32, 33],\n    },\n    15: {\n      0: [0],\n      1: [\n        [0, 5],\n        [21, 25],\n      ],\n      2: [\n        [0, 7],\n        [21, 23],\n      ],\n      3: [[0, 4]],\n      4: [\n        [0, 4],\n        [21, 26],\n        [28, 30],\n      ],\n      5: [[0, 2], [21, 26], 81],\n      6: [\n        [0, 2],\n        [21, 27],\n      ],\n      7: [\n        [0, 3],\n        [21, 27],\n        [81, 85],\n      ],\n      8: [\n        [0, 2],\n        [21, 26],\n      ],\n      9: [[0, 2], [21, 29], 81],\n      22: [\n        [0, 2],\n        [21, 24],\n      ],\n      25: [\n        [0, 2],\n        [22, 31],\n      ],\n      26: [[0, 2], [24, 27], [29, 32], 34],\n      28: [0, 1, [22, 27]],\n      29: [0, [21, 23]],\n    },\n    21: {\n      0: [0],\n      1: [[0, 6], [11, 14], [22, 24], 81],\n      2: [[0, 4], [11, 13], 24, [81, 83]],\n      3: [[0, 4], 11, 21, 23, 81],\n      4: [[0, 4], 11, [21, 23]],\n      5: [[0, 5], 21, 22],\n      6: [[0, 4], 24, 81, 82],\n      7: [[0, 3], 11, 26, 27, 81, 82],\n      8: [[0, 4], 11, 81, 82],\n      9: [[0, 5], 11, 21, 22],\n      10: [[0, 5], 11, 21, 81],\n      11: [[0, 3], 21, 22],\n      12: [[0, 2], 4, 21, 23, 24, 81, 82],\n      13: [[0, 3], 21, 22, 24, 81, 82],\n      14: [[0, 4], 21, 22, 81],\n    },\n    22: {\n      0: [0],\n      1: [[0, 6], 12, 22, [81, 83]],\n      2: [[0, 4], 11, 21, [81, 84]],\n      3: [[0, 3], 22, 23, 81, 82],\n      4: [[0, 3], 21, 22],\n      5: [[0, 3], 21, 23, 24, 81, 82],\n      6: [[0, 2], 4, 5, [21, 23], 25, 81],\n      7: [[0, 2], [21, 24], 81],\n      8: [[0, 2], 21, 22, 81, 82],\n      24: [[0, 6], 24, 26],\n    },\n    23: {\n      0: [0],\n      1: [[0, 12], 21, [23, 29], [81, 84]],\n      2: [[0, 8], 21, [23, 25], 27, [29, 31], 81],\n      3: [[0, 7], 21, 81, 82],\n      4: [[0, 7], 21, 22],\n      5: [[0, 3], 5, 6, [21, 24]],\n      6: [\n        [0, 6],\n        [21, 24],\n      ],\n      7: [[0, 16], 22, 81],\n      8: [[0, 5], 11, 22, 26, 28, 33, 81, 82],\n      9: [[0, 4], 21],\n      10: [[0, 5], 24, 25, 81, [83, 85]],\n      11: [[0, 2], 21, 23, 24, 81, 82],\n      12: [\n        [0, 2],\n        [21, 26],\n        [81, 83],\n      ],\n      27: [\n        [0, 4],\n        [21, 23],\n      ],\n    },\n    31: { 0: [0], 1: [0, 1, [3, 10], [12, 20]], 2: [0, 30] },\n    32: {\n      0: [0],\n      1: [[0, 7], 11, [13, 18], 24, 25],\n      2: [[0, 6], 11, 81, 82],\n      3: [[0, 5], 11, 12, [21, 24], 81, 82],\n      4: [[0, 2], 4, 5, 11, 12, 81, 82],\n      5: [\n        [0, 9],\n        [81, 85],\n      ],\n      6: [[0, 2], 11, 12, 21, 23, [81, 84]],\n      7: [0, 1, 3, 5, 6, [21, 24]],\n      8: [[0, 4], 11, 26, [29, 31]],\n      9: [[0, 3], [21, 25], 28, 81, 82],\n      10: [[0, 3], 11, 12, 23, 81, 84, 88],\n      11: [[0, 2], 11, 12, [81, 83]],\n      12: [\n        [0, 4],\n        [81, 84],\n      ],\n      13: [[0, 2], 11, [21, 24]],\n    },\n    33: {\n      0: [0],\n      1: [[0, 6], [8, 10], 22, 27, 82, 83, 85],\n      2: [0, 1, [3, 6], 11, 12, 25, 26, [81, 83]],\n      3: [[0, 4], 22, 24, [26, 29], 81, 82],\n      4: [[0, 2], 11, 21, 24, [81, 83]],\n      5: [\n        [0, 3],\n        [21, 23],\n      ],\n      6: [[0, 2], 21, 24, [81, 83]],\n      7: [[0, 3], 23, 26, 27, [81, 84]],\n      8: [[0, 3], 22, 24, 25, 81],\n      9: [[0, 3], 21, 22],\n      10: [[0, 4], [21, 24], 81, 82],\n      11: [[0, 2], [21, 27], 81],\n    },\n    34: {\n      0: [0],\n      1: [[0, 4], 11, [21, 24], 81],\n      2: [[0, 4], 7, 8, [21, 23], 25],\n      3: [[0, 4], 11, [21, 23]],\n      4: [[0, 6], 21],\n      5: [[0, 4], 6, [21, 23]],\n      6: [[0, 4], 21],\n      7: [[0, 3], 11, 21],\n      8: [[0, 3], 11, [22, 28], 81],\n      10: [\n        [0, 4],\n        [21, 24],\n      ],\n      11: [[0, 3], 22, [24, 26], 81, 82],\n      12: [[0, 4], 21, 22, 25, 26, 82],\n      13: [\n        [0, 2],\n        [21, 24],\n      ],\n      14: [\n        [0, 2],\n        [21, 24],\n      ],\n      15: [\n        [0, 3],\n        [21, 25],\n      ],\n      16: [\n        [0, 2],\n        [21, 23],\n      ],\n      17: [\n        [0, 2],\n        [21, 23],\n      ],\n      18: [[0, 2], [21, 25], 81],\n    },\n    35: {\n      0: [0],\n      1: [[0, 5], 11, [21, 25], 28, 81, 82],\n      2: [\n        [0, 6],\n        [11, 13],\n      ],\n      3: [[0, 5], 22],\n      4: [[0, 3], 21, [23, 30], 81],\n      5: [[0, 5], 21, [24, 27], [81, 83]],\n      6: [[0, 3], [22, 29], 81],\n      7: [\n        [0, 2],\n        [21, 25],\n        [81, 84],\n      ],\n      8: [[0, 2], [21, 25], 81],\n      9: [[0, 2], [21, 26], 81, 82],\n    },\n    36: {\n      0: [0],\n      1: [[0, 5], 11, [21, 24]],\n      2: [[0, 3], 22, 81],\n      3: [[0, 2], 13, [21, 23]],\n      4: [[0, 3], 21, [23, 30], 81, 82],\n      5: [[0, 2], 21],\n      6: [[0, 2], 22, 81],\n      7: [[0, 2], [21, 35], 81, 82],\n      8: [[0, 3], [21, 30], 81],\n      9: [\n        [0, 2],\n        [21, 26],\n        [81, 83],\n      ],\n      10: [\n        [0, 2],\n        [21, 30],\n      ],\n      11: [[0, 2], [21, 30], 81],\n    },\n    37: {\n      0: [0],\n      1: [[0, 5], 12, 13, [24, 26], 81],\n      2: [[0, 3], 5, [11, 14], [81, 85]],\n      3: [\n        [0, 6],\n        [21, 23],\n      ],\n      4: [[0, 6], 81],\n      5: [\n        [0, 3],\n        [21, 23],\n      ],\n      6: [[0, 2], [11, 13], 34, [81, 87]],\n      7: [[0, 5], 24, 25, [81, 86]],\n      8: [[0, 2], 11, [26, 32], [81, 83]],\n      9: [[0, 3], 11, 21, 23, 82, 83],\n      10: [\n        [0, 2],\n        [81, 83],\n      ],\n      11: [[0, 3], 21, 22],\n      12: [[0, 3]],\n      13: [[0, 2], 11, 12, [21, 29]],\n      14: [[0, 2], [21, 28], 81, 82],\n      15: [[0, 2], [21, 26], 81],\n      16: [\n        [0, 2],\n        [21, 26],\n      ],\n      17: [\n        [0, 2],\n        [21, 28],\n      ],\n    },\n    41: {\n      0: [0],\n      1: [[0, 6], 8, 22, [81, 85]],\n      2: [[0, 5], 11, [21, 25]],\n      3: [[0, 7], 11, [22, 29], 81],\n      4: [[0, 4], 11, [21, 23], 25, 81, 82],\n      5: [[0, 3], 5, 6, 22, 23, 26, 27, 81],\n      6: [[0, 3], 11, 21, 22],\n      7: [[0, 4], 11, 21, [24, 28], 81, 82],\n      8: [[0, 4], 11, [21, 23], 25, [81, 83]],\n      9: [[0, 2], 22, 23, [26, 28]],\n      10: [[0, 2], [23, 25], 81, 82],\n      11: [\n        [0, 4],\n        [21, 23],\n      ],\n      12: [[0, 2], 21, 22, 24, 81, 82],\n      13: [[0, 3], [21, 30], 81],\n      14: [[0, 3], [21, 26], 81],\n      15: [\n        [0, 3],\n        [21, 28],\n      ],\n      16: [[0, 2], [21, 28], 81],\n      17: [\n        [0, 2],\n        [21, 29],\n      ],\n      90: [0, 1],\n    },\n    42: {\n      0: [0],\n      1: [\n        [0, 7],\n        [11, 17],\n      ],\n      2: [[0, 5], 22, 81],\n      3: [[0, 3], [21, 25], 81],\n      5: [\n        [0, 6],\n        [25, 29],\n        [81, 83],\n      ],\n      6: [[0, 2], 6, 7, [24, 26], [82, 84]],\n      7: [[0, 4]],\n      8: [[0, 2], 4, 21, 22, 81],\n      9: [[0, 2], [21, 23], 81, 82, 84],\n      10: [[0, 3], [22, 24], 81, 83, 87],\n      11: [[0, 2], [21, 27], 81, 82],\n      12: [[0, 2], [21, 24], 81],\n      13: [[0, 3], 21, 81],\n      28: [[0, 2], 22, 23, [25, 28]],\n      90: [0, [4, 6], 21],\n    },\n    43: {\n      0: [0],\n      1: [[0, 5], 11, 12, 21, 22, 24, 81],\n      2: [[0, 4], 11, 21, [23, 25], 81],\n      3: [[0, 2], 4, 21, 81, 82],\n      4: [0, 1, [5, 8], 12, [21, 24], 26, 81, 82],\n      5: [[0, 3], 11, [21, 25], [27, 29], 81],\n      6: [[0, 3], 11, 21, 23, 24, 26, 81, 82],\n      7: [[0, 3], [21, 26], 81],\n      8: [[0, 2], 11, 21, 22],\n      9: [[0, 3], [21, 23], 81],\n      10: [[0, 3], [21, 28], 81],\n      11: [[0, 2], 21, 22],\n    },\n    44: {\n      0: [0],\n      1: [[0, 7], [11, 16], 83, 84],\n      2: [[0, 5], 21, 22, 24, 29, 32, 33, 81, 82],\n      3: [0, 1, [3, 8]],\n      4: [[0, 4]],\n      5: [0, 1, [6, 15], 23, 82, 83],\n      6: [0, 1, [4, 8]],\n      7: [0, 1, [3, 5], 81, [83, 85]],\n      8: [[0, 4], 11, 23, 25, [81, 83]],\n      9: [[0, 3], 23, [81, 83]],\n      12: [[0, 3], [23, 26], 83, 84],\n      13: [[0, 3], [22, 24], 81],\n      14: [[0, 2], [21, 24], 26, 27, 81],\n      15: [[0, 2], 21, 23, 81],\n      16: [\n        [0, 2],\n        [21, 25],\n      ],\n      17: [[0, 2], 21, 23, 81],\n      18: [[0, 3], 21, 23, [25, 27], 81, 82],\n      19: [0],\n      20: [0],\n      51: [[0, 3], 21, 22],\n      52: [[0, 3], 21, 22, 24, 81],\n      53: [[0, 2], [21, 23], 81],\n    },\n    45: {\n      0: [0],\n      1: [\n        [0, 9],\n        [21, 27],\n      ],\n      2: [\n        [0, 5],\n        [21, 26],\n      ],\n      3: [[0, 5], 11, 12, [21, 32]],\n      4: [0, 1, [3, 6], 11, [21, 23], 81],\n      5: [[0, 3], 12, 21],\n      6: [[0, 3], 21, 81],\n      7: [[0, 3], 21, 22],\n      8: [[0, 4], 21, 81],\n      9: [[0, 3], [21, 24], 81],\n      10: [\n        [0, 2],\n        [21, 31],\n      ],\n      11: [\n        [0, 2],\n        [21, 23],\n      ],\n      12: [[0, 2], [21, 29], 81],\n      13: [[0, 2], [21, 24], 81],\n      14: [[0, 2], [21, 25], 81],\n    },\n    46: {\n      0: [0],\n      1: [0, 1, [5, 8]],\n      2: [0, 1],\n      3: [0, [21, 23]],\n      90: [\n        [0, 3],\n        [5, 7],\n        [21, 39],\n      ],\n    },\n    50: { 0: [0], 1: [[0, 19]], 2: [0, [22, 38], [40, 43]], 3: [0, [81, 84]] },\n    51: {\n      0: [0],\n      1: [0, 1, [4, 8], [12, 15], [21, 24], 29, 31, 32, [81, 84]],\n      3: [[0, 4], 11, 21, 22],\n      4: [[0, 3], 11, 21, 22],\n      5: [[0, 4], 21, 22, 24, 25],\n      6: [0, 1, 3, 23, 26, [81, 83]],\n      7: [0, 1, 3, 4, [22, 27], 81],\n      8: [[0, 2], 11, 12, [21, 24]],\n      9: [\n        [0, 4],\n        [21, 23],\n      ],\n      10: [[0, 2], 11, 24, 25, 28],\n      11: [[0, 2], [11, 13], 23, 24, 26, 29, 32, 33, 81],\n      13: [[0, 4], [21, 25], 81],\n      14: [\n        [0, 2],\n        [21, 25],\n      ],\n      15: [\n        [0, 3],\n        [21, 29],\n      ],\n      16: [[0, 3], [21, 23], 81],\n      17: [[0, 3], [21, 25], 81],\n      18: [\n        [0, 3],\n        [21, 27],\n      ],\n      19: [\n        [0, 3],\n        [21, 23],\n      ],\n      20: [[0, 2], 21, 22, 81],\n      32: [0, [21, 33]],\n      33: [0, [21, 38]],\n      34: [0, 1, [22, 37]],\n    },\n    52: {\n      0: [0],\n      1: [[0, 3], [11, 15], [21, 23], 81],\n      2: [0, 1, 3, 21, 22],\n      3: [[0, 3], [21, 30], 81, 82],\n      4: [\n        [0, 2],\n        [21, 25],\n      ],\n      5: [\n        [0, 2],\n        [21, 27],\n      ],\n      6: [\n        [0, 3],\n        [21, 28],\n      ],\n      22: [0, 1, [22, 30]],\n      23: [0, 1, [22, 28]],\n      24: [0, 1, [22, 28]],\n      26: [0, 1, [22, 36]],\n      27: [[0, 2], 22, 23, [25, 32]],\n    },\n    53: {\n      0: [0],\n      1: [[0, 3], [11, 14], 21, 22, [24, 29], 81],\n      3: [[0, 2], [21, 26], 28, 81],\n      4: [\n        [0, 2],\n        [21, 28],\n      ],\n      5: [\n        [0, 2],\n        [21, 24],\n      ],\n      6: [\n        [0, 2],\n        [21, 30],\n      ],\n      7: [\n        [0, 2],\n        [21, 24],\n      ],\n      8: [\n        [0, 2],\n        [21, 29],\n      ],\n      9: [\n        [0, 2],\n        [21, 27],\n      ],\n      23: [0, 1, [22, 29], 31],\n      25: [\n        [0, 4],\n        [22, 32],\n      ],\n      26: [0, 1, [21, 28]],\n      27: [0, 1, [22, 30]],\n      28: [0, 1, 22, 23],\n      29: [0, 1, [22, 32]],\n      31: [0, 2, 3, [22, 24]],\n      34: [0, [21, 23]],\n      33: [0, 21, [23, 25]],\n      35: [0, [21, 28]],\n    },\n    54: {\n      0: [0],\n      1: [\n        [0, 2],\n        [21, 27],\n      ],\n      21: [0, [21, 29], 32, 33],\n      22: [0, [21, 29], [31, 33]],\n      23: [0, 1, [22, 38]],\n      24: [0, [21, 31]],\n      25: [0, [21, 27]],\n      26: [0, [21, 27]],\n    },\n    61: {\n      0: [0],\n      1: [[0, 4], [11, 16], 22, [24, 26]],\n      2: [[0, 4], 22],\n      3: [\n        [0, 4],\n        [21, 24],\n        [26, 31],\n      ],\n      4: [[0, 4], [22, 31], 81],\n      5: [[0, 2], [21, 28], 81, 82],\n      6: [\n        [0, 2],\n        [21, 32],\n      ],\n      7: [\n        [0, 2],\n        [21, 30],\n      ],\n      8: [\n        [0, 2],\n        [21, 31],\n      ],\n      9: [\n        [0, 2],\n        [21, 29],\n      ],\n      10: [\n        [0, 2],\n        [21, 26],\n      ],\n    },\n    62: {\n      0: [0],\n      1: [[0, 5], 11, [21, 23]],\n      2: [0, 1],\n      3: [[0, 2], 21],\n      4: [\n        [0, 3],\n        [21, 23],\n      ],\n      5: [\n        [0, 3],\n        [21, 25],\n      ],\n      6: [\n        [0, 2],\n        [21, 23],\n      ],\n      7: [\n        [0, 2],\n        [21, 25],\n      ],\n      8: [\n        [0, 2],\n        [21, 26],\n      ],\n      9: [[0, 2], [21, 24], 81, 82],\n      10: [\n        [0, 2],\n        [21, 27],\n      ],\n      11: [\n        [0, 2],\n        [21, 26],\n      ],\n      12: [\n        [0, 2],\n        [21, 28],\n      ],\n      24: [0, 21, [24, 29]],\n      26: [0, 21, [23, 30]],\n      29: [0, 1, [21, 27]],\n      30: [0, 1, [21, 27]],\n    },\n    63: {\n      0: [0],\n      1: [\n        [0, 5],\n        [21, 23],\n      ],\n      2: [0, 2, [21, 25]],\n      21: [0, [21, 23], [26, 28]],\n      22: [0, [21, 24]],\n      23: [0, [21, 24]],\n      25: [0, [21, 25]],\n      26: [0, [21, 26]],\n      27: [0, 1, [21, 26]],\n      28: [\n        [0, 2],\n        [21, 23],\n      ],\n    },\n    64: {\n      0: [0],\n      1: [0, 1, [4, 6], 21, 22, 81],\n      2: [[0, 3], 5, [21, 23]],\n      3: [[0, 3], [21, 24], 81],\n      4: [\n        [0, 2],\n        [21, 25],\n      ],\n      5: [[0, 2], 21, 22],\n    },\n    65: {\n      0: [0],\n      1: [[0, 9], 21],\n      2: [[0, 5]],\n      21: [0, 1, 22, 23],\n      22: [0, 1, 22, 23],\n      23: [[0, 3], [23, 25], 27, 28],\n      27: [[0, 2], 22, 23],\n      28: [0, 1, [22, 29]],\n      29: [0, 1, [22, 29]],\n      30: [0, 1, [22, 24]],\n      31: [0, 1, [21, 31]],\n      32: [0, 1, [21, 27]],\n      40: [0, 2, 3, [21, 28]],\n      42: [[0, 2], 21, [23, 26]],\n      43: [0, 1, [21, 26]],\n      90: [[0, 4]],\n    },\n    71: { 0: [0] },\n    81: { 0: [0] },\n    82: { 0: [0] },\n  };\n  const provincial = Number.parseInt(v.substr(0, 2), 10);\n  const prefectural = Number.parseInt(v.substr(2, 2), 10);\n  const county = Number.parseInt(v.substr(4, 2), 10);\n  if (!adminDivisionCodes[provincial] || !adminDivisionCodes[provincial][prefectural]) return false;\n  const rangeDef = adminDivisionCodes[provincial][prefectural];\n  let inRange = false;\n  for (let i = 0; i < rangeDef.length; i++) {\n    const r = rangeDef[i];\n    if (Array.isArray(r) ? r[0] <= county && county <= r[1] : county === r) {\n      inRange = true;\n      break;\n    }\n  }\n  if (!inRange) return false;\n  let dob: string;\n  if (v.length === 18) {\n    dob = v.substr(6, 8);\n  } else {\n    dob = `19${v.substr(6, 6)}`;\n  }\n  const year = Number.parseInt(dob.substr(0, 4), 10);\n  const month = Number.parseInt(dob.substr(4, 2), 10);\n  const day = Number.parseInt(dob.substr(6, 2), 10);\n  if (!isValidDate(year, month, day)) return false;\n  if (v.length === 18) {\n    const weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];\n    let sum = 0;\n    for (let i = 0; i < 17; i++) {\n      sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n    }\n    sum = (12 - (sum % 11)) % 11;\n    const checksum = v.charAt(17).toUpperCase() !== \"X\" ? Number.parseInt(v.charAt(17), 10) : 10;\n    return checksum === sum;\n  }\n  return true;\n}\n\nfunction coId(value: string): boolean {\n  const v = value.replace(/\\./g, \"\").replace(\"-\", \"\");\n  if (!/^\\d{8,16}$/.test(v)) return false;\n  const length = v.length;\n  const weight = [3, 7, 13, 17, 19, 23, 29, 37, 41, 43, 47, 53, 59, 67, 71];\n  let sum = 0;\n  for (let i = length - 2; i >= 0; i--) {\n    sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  }\n  sum = sum % 11;\n  if (sum >= 2) sum = 11 - sum;\n  return `${sum}` === v.substr(length - 1);\n}\n\nfunction czId(value: string): boolean {\n  if (!/^\\d{9,10}$/.test(value)) return false;\n  let year = 1900 + Number.parseInt(value.substr(0, 2), 10);\n  const month = (Number.parseInt(value.substr(2, 2), 10) % 50) % 20;\n  const day = Number.parseInt(value.substr(4, 2), 10);\n  if (value.length === 9) {\n    if (year >= 1980) year -= 100;\n    if (year > 1953) return false;\n  } else if (year < 1954) {\n    year += 100;\n  }\n  if (!isValidDate(year, month, day)) return false;\n  if (value.length === 10) {\n    let check = Number.parseInt(value.substr(0, 9), 10) % 11;\n    if (year < 1985) check = check % 10;\n    return `${check}` === value.substr(9, 1);\n  }\n  return true;\n}\n\nfunction dkId(value: string): boolean {\n  if (!/^[0-9]{6}[-]{0,1}[0-9]{4}$/.test(value)) return false;\n  const v = value.replace(/-/g, \"\");\n  const day = Number.parseInt(v.substr(0, 2), 10);\n  const month = Number.parseInt(v.substr(2, 2), 10);\n  let year = Number.parseInt(v.substr(4, 2), 10);\n  switch (true) {\n    case \"5678\".indexOf(v.charAt(6)) !== -1 && year >= 58:\n      year += 1800;\n      break;\n    case \"0123\".indexOf(v.charAt(6)) !== -1:\n    case \"49\".indexOf(v.charAt(6)) !== -1 && year >= 37:\n      year += 1900;\n      break;\n    default:\n      year += 2000;\n      break;\n  }\n  return isValidDate(year, month, day);\n}\n\nfunction esId(value: string): boolean {\n  const isDNI = /^[0-9]{8}[-]{0,1}[A-HJ-NP-TV-Z]$/.test(value);\n  const isNIE = /^[XYZ][-]{0,1}[0-9]{7}[-]{0,1}[A-HJ-NP-TV-Z]$/.test(value);\n  const isCIF = /^[A-HNPQS][-]{0,1}[0-9]{7}[-]{0,1}[0-9A-J]$/.test(value);\n  if (!isDNI && !isNIE && !isCIF) return false;\n  let v = value.replace(/-/g, \"\");\n  if (isDNI || isNIE) {\n    const index = \"XYZ\".indexOf(v.charAt(0));\n    if (index !== -1) v = `${index}${v.substr(1)}`;\n    const check = \"TRWAGMYFPDXBNJZSQVHLCKE\"[Number.parseInt(v.substr(0, 8), 10) % 23];\n    return check === v.substr(8, 1);\n  }\n  const check = v.substr(1, 7);\n  const letter = v[0];\n  const control = v.slice(-1);\n  let sum = 0;\n  for (let i = 0; i < check.length; i++) {\n    if (i % 2 !== 0) {\n      sum += Number.parseInt(check[i], 10);\n    } else {\n      const tmp = `${Number.parseInt(check[i], 10) * 2}`;\n      sum += Number.parseInt(tmp[0], 10);\n      if (tmp.length === 2) sum += Number.parseInt(tmp[1], 10);\n    }\n  }\n  const lastDigit = sum - Math.floor(sum / 10) * 10;\n  const mod = lastDigit !== 0 ? 10 - lastDigit : 0;\n  if (\"KQS\".indexOf(letter) !== -1) return control === \"JABCDEFGHI\"[mod];\n  if (\"ABEH\".indexOf(letter) !== -1) return control === `${mod}`;\n  return control === `${mod}` || control === \"JABCDEFGHI\"[mod];\n}\n\nfunction fiId(value: string): boolean {\n  if (!/^[0-9]{6}[-+A][0-9]{3}[0-9ABCDEFHJKLMNPRSTUVWXY]$/.test(value)) return false;\n  const day = Number.parseInt(value.substr(0, 2), 10);\n  const month = Number.parseInt(value.substr(2, 2), 10);\n  let year = Number.parseInt(value.substr(4, 2), 10);\n  const centuries: Record<string, number> = { \"+\": 1800, \"-\": 1900, A: 2000 };\n  year = centuries[value.charAt(6)] + year;\n  if (!isValidDate(year, month, day)) return false;\n  const individual = Number.parseInt(value.substr(7, 3), 10);\n  if (individual < 2) return false;\n  const n = Number.parseInt(`${value.substr(0, 6)}${value.substr(7, 3)}`, 10);\n  return \"0123456789ABCDEFHJKLMNPRSTUVWXY\".charAt(n % 31) === value.charAt(10);\n}\n\nfunction frId(value: string): boolean {\n  const v = value.toUpperCase();\n  if (!/^(1|2)\\d{2}\\d{2}(\\d{2}|\\d[A-Z]|\\d{3})\\d{2,3}\\d{3}\\d{2}$/.test(v)) return false;\n  const cog = v.substr(5, 2);\n  let normalized: string;\n  switch (true) {\n    case /^\\d{2}$/.test(cog):\n      normalized = value;\n      break;\n    case cog === \"2A\":\n      normalized = `${value.substr(0, 5)}19${value.substr(7)}`;\n      break;\n    case cog === \"2B\":\n      normalized = `${value.substr(0, 5)}18${value.substr(7)}`;\n      break;\n    default:\n      return false;\n  }\n  const mod = 97 - (Number.parseInt(normalized.substr(0, 13), 10) % 97);\n  const prefixWithZero = mod < 10 ? `0${mod}` : `${mod}`;\n  return prefixWithZero === normalized.substr(13);\n}\n\nfunction hkId(value: string): boolean {\n  const v = value.toUpperCase();\n  if (!/^[A-MP-Z]{1,2}[0-9]{6}[0-9A]$/.test(v)) return false;\n  const alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n  const firstChar = v.charAt(0);\n  const secondChar = v.charAt(1);\n  let sum = 0;\n  let digitParts: string;\n  if (/^[A-Z]$/.test(secondChar)) {\n    sum += 9 * (10 + alphabet.indexOf(firstChar));\n    sum += 8 * (10 + alphabet.indexOf(secondChar));\n    digitParts = v.substr(2);\n  } else {\n    sum += 9 * 36;\n    sum += 8 * (10 + alphabet.indexOf(firstChar));\n    digitParts = v.substr(1);\n  }\n  const length = digitParts.length;\n  for (let i = 0; i < length - 1; i++) {\n    sum += (7 - i) * Number.parseInt(digitParts.charAt(i), 10);\n  }\n  const remaining = sum % 11;\n  const checkDigit = remaining === 0 ? \"0\" : 11 - remaining === 10 ? \"A\" : `${11 - remaining}`;\n  return checkDigit === digitParts.charAt(length - 1);\n}\n\nfunction hrId(value: string): boolean {\n  return /^[0-9]{11}$/.test(value) && mod11And10(value);\n}\n\nfunction idId(value: string): boolean {\n  if (!/^[2-9]\\d{11}$/.test(value)) return false;\n  const digits = value.split(\"\").map((c) => Number.parseInt(c, 10));\n  return verhoeff(digits);\n}\n\nfunction ieId(value: string): boolean {\n  if (!/^\\d{7}[A-W][AHWTX]?$/.test(value)) return false;\n  const getCheckDigit = (v: string): string => {\n    let input = v;\n    while (input.length < 7) input = `0${input}`;\n    const alphabet = \"WABCDEFGHIJKLMNOPQRSTUV\";\n    let sum = 0;\n    for (let i = 0; i < 7; i++) {\n      sum += Number.parseInt(input.charAt(i), 10) * (8 - i);\n    }\n    sum += 9 * alphabet.indexOf(input.substr(7));\n    return alphabet[sum % 23];\n  };\n  const isValid =\n    value.length === 9 && (value.charAt(8) === \"A\" || value.charAt(8) === \"H\")\n      ? value.charAt(7) === getCheckDigit(`${value.substr(0, 7)}${value.substr(8)}`)\n      : value.charAt(7) === getCheckDigit(value.substr(0, 7));\n  return isValid;\n}\n\nfunction ilId(value: string): boolean {\n  if (!/^\\d{1,9}$/.test(value)) return false;\n  return luhn(value);\n}\n\nfunction isId(value: string): boolean {\n  if (!/^[0-9]{6}[-]{0,1}[0-9]{4}$/.test(value)) return false;\n  const v = value.replace(/-/g, \"\");\n  const day = Number.parseInt(v.substr(0, 2), 10);\n  const month = Number.parseInt(v.substr(2, 2), 10);\n  let year = Number.parseInt(v.substr(4, 2), 10);\n  const century = Number.parseInt(v.charAt(9), 10);\n  year = century === 9 ? 1900 + year : (20 + century) * 100 + year;\n  if (!isValidDate(year, month, day, true)) return false;\n  const weight = [3, 2, 7, 6, 5, 4, 3, 2];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) {\n    sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  }\n  sum = 11 - (sum % 11);\n  return `${sum}` === v.charAt(8);\n}\n\nfunction krId(value: string): boolean {\n  const v = value.replace(\"-\", \"\");\n  if (!/^\\d{13}$/.test(v)) return false;\n  const sDigit = v.charAt(6);\n  let year = Number.parseInt(v.substr(0, 2), 10);\n  const month = Number.parseInt(v.substr(2, 2), 10);\n  const day = Number.parseInt(v.substr(4, 2), 10);\n  switch (sDigit) {\n    case \"1\":\n    case \"2\":\n    case \"5\":\n    case \"6\":\n      year += 1900;\n      break;\n    case \"3\":\n    case \"4\":\n    case \"7\":\n    case \"8\":\n      year += 2000;\n      break;\n    default:\n      year += 1800;\n      break;\n  }\n  if (!isValidDate(year, month, day)) return false;\n  const weight = [2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5];\n  let sum = 0;\n  for (let i = 0; i < 12; i++) {\n    sum += weight[i] * Number.parseInt(v.charAt(i), 10);\n  }\n  const checkDigit = (11 - (sum % 11)) % 10;\n  return `${checkDigit}` === v.charAt(12);\n}\n\nfunction ltId(value: string): boolean {\n  if (!/^[0-9]{11}$/.test(value)) return false;\n  const gender = Number.parseInt(value.charAt(0), 10);\n  const year2d = Number.parseInt(value.substr(1, 2), 10);\n  const month = Number.parseInt(value.substr(3, 2), 10);\n  const day = Number.parseInt(value.substr(5, 2), 10);\n  const century = gender % 2 === 0 ? 17 + gender / 2 : 17 + (gender + 1) / 2;\n  const year = century * 100 + year2d;\n  if (!isValidDate(year, month, day, true)) return false;\n  const weight1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 1];\n  let sum = 0;\n  for (let i = 0; i < 10; i++) {\n    sum += Number.parseInt(value.charAt(i), 10) * weight1[i];\n  }\n  sum = sum % 11;\n  if (sum !== 10) return `${sum}` === value.charAt(10);\n  const weight2 = [3, 4, 5, 6, 7, 8, 9, 1, 2, 3];\n  sum = 0;\n  for (let i = 0; i < 10; i++) {\n    sum += Number.parseInt(value.charAt(i), 10) * weight2[i];\n  }\n  sum = sum % 11;\n  if (sum === 10) sum = 0;\n  return `${sum}` === value.charAt(10);\n}\n\nfunction lvId(value: string): boolean {\n  if (!/^[0-9]{6}[-]{0,1}[0-9]{5}$/.test(value)) return false;\n  const v = value.replace(/\\D/g, \"\");\n  const day = Number.parseInt(v.substr(0, 2), 10);\n  const month = Number.parseInt(v.substr(2, 2), 10);\n  let year = Number.parseInt(v.substr(4, 2), 10);\n  year = year + 1800 + Number.parseInt(v.charAt(6), 10) * 100;\n  if (!isValidDate(year, month, day, true)) return false;\n  const weight = [10, 5, 8, 4, 2, 1, 6, 3, 7, 9];\n  let sum = 0;\n  for (let i = 0; i < 10; i++) {\n    sum += Number.parseInt(v.charAt(i), 10) * weight[i];\n  }\n  sum = ((sum + 1) % 11) % 10;\n  return `${sum}` === v.charAt(10);\n}\n\nfunction mxId(value: string): boolean {\n  const v = value.toUpperCase();\n  if (!/^[A-Z]{4}\\d{6}[A-Z]{6}[0-9A-Z]\\d$/.test(v)) return false;\n  const blacklistNames = [\n    \"BACA\",\n    \"BAKA\",\n    \"BUEI\",\n    \"BUEY\",\n    \"CACA\",\n    \"CACO\",\n    \"CAGA\",\n    \"CAGO\",\n    \"CAKA\",\n    \"CAKO\",\n    \"COGE\",\n    \"COGI\",\n    \"COJA\",\n    \"COJE\",\n    \"COJI\",\n    \"COJO\",\n    \"COLA\",\n    \"CULO\",\n    \"FALO\",\n    \"FETO\",\n    \"GETA\",\n    \"GUEI\",\n    \"GUEY\",\n    \"JETA\",\n    \"JOTO\",\n    \"KACA\",\n    \"KACO\",\n    \"KAGA\",\n    \"KAGO\",\n    \"KAKA\",\n    \"KAKO\",\n    \"KOGE\",\n    \"KOGI\",\n    \"KOJA\",\n    \"KOJE\",\n    \"KOJI\",\n    \"KOJO\",\n    \"KOLA\",\n    \"KULO\",\n    \"LILO\",\n    \"LOCA\",\n    \"LOCO\",\n    \"LOKA\",\n    \"LOKO\",\n    \"MAME\",\n    \"MAMO\",\n    \"MEAR\",\n    \"MEAS\",\n    \"MEON\",\n    \"MIAR\",\n    \"MION\",\n    \"MOCO\",\n    \"MOKO\",\n    \"MULA\",\n    \"MULO\",\n    \"NACA\",\n    \"NACO\",\n    \"PEDA\",\n    \"PEDO\",\n    \"PENE\",\n    \"PIPI\",\n    \"PITO\",\n    \"POPO\",\n    \"PUTA\",\n    \"PUTO\",\n    \"QULO\",\n    \"RATA\",\n    \"ROBA\",\n    \"ROBE\",\n    \"ROBO\",\n    \"RUIN\",\n    \"SENO\",\n    \"TETA\",\n    \"VACA\",\n    \"VAGA\",\n    \"VAGO\",\n    \"VAKA\",\n    \"VUEI\",\n    \"VUEY\",\n    \"WUEI\",\n    \"WUEY\",\n  ];\n  const name = v.substr(0, 4);\n  if (blacklistNames.indexOf(name) >= 0) return false;\n  const year2d = Number.parseInt(v.substr(4, 2), 10);\n  const month = Number.parseInt(v.substr(6, 2), 10);\n  const day = Number.parseInt(v.substr(8, 2), 10);\n  const year = /^[0-9]$/.test(v.charAt(16)) ? 1900 + year2d : 2000 + year2d;\n  if (!isValidDate(year, month, day)) return false;\n  const gender = v.charAt(10);\n  if (gender !== \"H\" && gender !== \"M\") return false;\n  const state = v.substr(11, 2);\n  const states = [\n    \"AS\",\n    \"BC\",\n    \"BS\",\n    \"CC\",\n    \"CH\",\n    \"CL\",\n    \"CM\",\n    \"CS\",\n    \"DF\",\n    \"DG\",\n    \"GR\",\n    \"GT\",\n    \"HG\",\n    \"JC\",\n    \"MC\",\n    \"MN\",\n    \"MS\",\n    \"NE\",\n    \"NL\",\n    \"NT\",\n    \"OC\",\n    \"PL\",\n    \"QR\",\n    \"QT\",\n    \"SL\",\n    \"SP\",\n    \"SR\",\n    \"TC\",\n    \"TL\",\n    \"TS\",\n    \"VZ\",\n    \"YN\",\n    \"ZS\",\n  ];\n  if (states.indexOf(state) === -1) return false;\n  const alphabet = \"0123456789ABCDEFGHIJKLMN&OPQRSTUVWXYZ\";\n  let sum = 0;\n  for (let i = 0; i < v.length - 1; i++) {\n    sum += (18 - i) * alphabet.indexOf(v.charAt(i));\n  }\n  sum = (10 - (sum % 10)) % 10;\n  return `${sum}` === v.charAt(v.length - 1);\n}\n\nfunction myId(value: string): boolean {\n  if (!/^\\d{12}$/.test(value)) return false;\n  const year = Number.parseInt(value.substr(0, 2), 10);\n  const month = Number.parseInt(value.substr(2, 2), 10);\n  const day = Number.parseInt(value.substr(4, 2), 10);\n  if (!isValidDate(year + 1900, month, day) && !isValidDate(year + 2000, month, day)) return false;\n  const placeOfBirth = value.substr(6, 2);\n  const notAvailable = [\n    \"17\",\n    \"18\",\n    \"19\",\n    \"20\",\n    \"69\",\n    \"70\",\n    \"73\",\n    \"80\",\n    \"81\",\n    \"94\",\n    \"95\",\n    \"96\",\n    \"97\",\n  ];\n  return notAvailable.indexOf(placeOfBirth) === -1;\n}\n\nfunction nlId(value: string): boolean {\n  if (value.length < 8) return false;\n  let v = value;\n  if (v.length === 8) v = `0${v}`;\n  if (!/^[0-9]{4}[.]{0,1}[0-9]{2}[.]{0,1}[0-9]{3}$/.test(v)) return false;\n  v = v.replace(/\\./g, \"\");\n  if (Number.parseInt(v, 10) === 0) return false;\n  let sum = 0;\n  for (let i = 0; i < v.length - 1; i++) {\n    sum += (9 - i) * Number.parseInt(v.charAt(i), 10);\n  }\n  sum = sum % 11;\n  if (sum === 10) return false;\n  return `${sum}` === v.charAt(v.length - 1);\n}\n\nfunction noId(value: string): boolean {\n  if (!/^\\d{11}$/.test(value)) return false;\n  const firstCd = (v: string): number => {\n    const weight = [3, 7, 6, 1, 8, 9, 4, 5, 2];\n    let sum = 0;\n    for (let i = 0; i < 9; i++) {\n      sum += weight[i] * Number.parseInt(v.charAt(i), 10);\n    }\n    return 11 - (sum % 11);\n  };\n  const secondCd = (v: string): number => {\n    const weight = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];\n    let sum = 0;\n    for (let i = 0; i < 10; i++) {\n      sum += weight[i] * Number.parseInt(v.charAt(i), 10);\n    }\n    return 11 - (sum % 11);\n  };\n  return `${firstCd(value)}` === value.substr(-2, 1) && `${secondCd(value)}` === value.substr(-1);\n}\n\nfunction peId(value: string): boolean {\n  if (!/^\\d{8}[0-9A-Z]?$/.test(value)) return false;\n  if (value.length === 8) return true;\n  const weight = [3, 2, 7, 6, 5, 4, 3, 2];\n  let sum = 0;\n  for (let i = 0; i < 8; i++) {\n    sum += weight[i] * Number.parseInt(value.charAt(i), 10);\n  }\n  const cd = sum % 11;\n  const checkDigit = [6, 5, 4, 3, 2, 1, 1, 0, 9, 8, 7][cd];\n  const checkChar = \"KJIHGFEDCBA\".charAt(cd);\n  return value.charAt(8) === `${checkDigit}` || value.charAt(8) === checkChar;\n}\n\nfunction plId(value: string): boolean {\n  if (!/^[0-9]{11}$/.test(value)) return false;\n  const weight = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 7];\n  let sum = 0;\n  for (let i = 0; i < 10; i++) {\n    sum += weight[i] * Number.parseInt(value.charAt(i), 10);\n  }\n  sum = sum % 10;\n  if (sum === 0) sum = 10;\n  sum = 10 - sum;\n  return `${sum}` === value.charAt(10);\n}\n\nfunction roId(value: string): boolean {\n  if (!/^[0-9]{13}$/.test(value)) return false;\n  const gender = Number.parseInt(value.charAt(0), 10);\n  if (gender === 0 || gender === 7 || gender === 8) return false;\n  const year2d = Number.parseInt(value.substr(1, 2), 10);\n  const month = Number.parseInt(value.substr(3, 2), 10);\n  const day = Number.parseInt(value.substr(5, 2), 10);\n  if (day > 31 || month > 12) return false;\n  const centuries: Record<string, number> = {\n    \"1\": 1900,\n    \"2\": 1900,\n    \"3\": 1800,\n    \"4\": 1800,\n    \"5\": 2000,\n    \"6\": 2000,\n  };\n  if (gender !== 9) {\n    const year = (centuries[`${gender}`] ?? 1900) + year2d;\n    if (!isValidDate(year, month, day)) return false;\n  }\n  const weight = [2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7, 9];\n  let sum = 0;\n  for (let i = 0; i < 12; i++) {\n    sum += Number.parseInt(value.charAt(i), 10) * weight[i];\n  }\n  sum = sum % 11;\n  if (sum === 10) sum = 1;\n  return `${sum}` === value.charAt(12);\n}\n\nfunction seId(value: string): boolean {\n  if (!/^[0-9]{10}$/.test(value) && !/^[0-9]{6}[-+][0-9]{4}$/.test(value)) return false;\n  const v = value.replace(/[^0-9]/g, \"\");\n  const year = Number.parseInt(v.substr(0, 2), 10) + 1900;\n  const month = Number.parseInt(v.substr(2, 2), 10);\n  const day = Number.parseInt(v.substr(4, 2), 10);\n  if (!isValidDate(year, month, day)) return false;\n  return luhn(v);\n}\n\nfunction smId(value: string): boolean {\n  return /^\\d{5}$/.test(value);\n}\n\nfunction thId(value: string): boolean {\n  if (value.length !== 13) return false;\n  let sum = 0;\n  for (let i = 0; i < 12; i++) {\n    sum += Number.parseInt(value.charAt(i), 10) * (13 - i);\n  }\n  return (11 - (sum % 11)) % 10 === Number.parseInt(value.charAt(12), 10);\n}\n\nfunction trId(value: string): boolean {\n  if (value.length !== 11) return false;\n  let sum = 0;\n  for (let i = 0; i < 10; i++) {\n    sum += Number.parseInt(value.charAt(i), 10);\n  }\n  return sum % 10 === Number.parseInt(value.charAt(10), 10);\n}\n\nfunction twId(value: string): boolean {\n  const v = value.toUpperCase();\n  if (!/^[A-Z][12][0-9]{8}$/.test(v)) return false;\n  const length = v.length;\n  const alphabet = \"ABCDEFGHJKLMNPQRSTUVXYWZIO\";\n  const letterIndex = alphabet.indexOf(v.charAt(0)) + 10;\n  const letterValue = Math.floor(letterIndex / 10) + (letterIndex % 10) * (length - 1);\n  let sum = 0;\n  for (let i = 1; i < length - 1; i++) {\n    sum += Number.parseInt(v.charAt(i), 10) * (length - 1 - i);\n  }\n  return (letterValue + sum + Number.parseInt(v.charAt(length - 1), 10)) % 10 === 0;\n}\n\nfunction uyId(value: string): boolean {\n  if (!/^\\d{8}$/.test(value)) return false;\n  const weight = [2, 9, 8, 7, 6, 3, 4];\n  let sum = 0;\n  for (let i = 0; i < 7; i++) {\n    sum += Number.parseInt(value.charAt(i), 10) * weight[i];\n  }\n  sum = sum % 10;\n  if (sum > 0) sum = 10 - sum;\n  return `${sum}` === value.charAt(7);\n}\n\nfunction zaId(value: string): boolean {\n  if (!/^[0-9]{10}[0|1][8|9][0-9]$/.test(value)) return false;\n  const year2d = Number.parseInt(value.substr(0, 2), 10);\n  const currentYear = new Date().getFullYear() % 100;\n  const month = Number.parseInt(value.substr(2, 2), 10);\n  const day = Number.parseInt(value.substr(4, 2), 10);\n  const year = year2d >= currentYear ? year2d + 1900 : year2d + 2000;\n  if (!isValidDate(year, month, day)) return false;\n  return luhn(value);\n}\n\n// --- Validator factory ---\n\nconst COUNTRY_CODES = new Set([\n  \"AR\",\n  \"BA\",\n  \"BG\",\n  \"BR\",\n  \"CH\",\n  \"CL\",\n  \"CN\",\n  \"CO\",\n  \"CZ\",\n  \"DK\",\n  \"EE\",\n  \"ES\",\n  \"FI\",\n  \"FR\",\n  \"HK\",\n  \"HR\",\n  \"ID\",\n  \"IE\",\n  \"IL\",\n  \"IS\",\n  \"KR\",\n  \"LT\",\n  \"LV\",\n  \"ME\",\n  \"MK\",\n  \"MX\",\n  \"MY\",\n  \"NL\",\n  \"NO\",\n  \"PE\",\n  \"PL\",\n  \"RO\",\n  \"RS\",\n  \"SE\",\n  \"SI\",\n  \"SK\",\n  \"SM\",\n  \"TH\",\n  \"TR\",\n  \"TW\",\n  \"UY\",\n  \"ZA\",\n]);\n\nexport const id: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const country = ((input.options.country as string | undefined) || \"\").toUpperCase();\n    if (!country || !COUNTRY_CODES.has(country)) return { valid: true };\n    switch (country) {\n      case \"AR\":\n        return { valid: arId(input.value) };\n      case \"BA\":\n        return { valid: jmbg(input.value, \"BA\") };\n      case \"BG\":\n        return { valid: bgId(input.value) };\n      case \"BR\":\n        return { valid: brId(input.value) };\n      case \"CH\":\n        return { valid: chId(input.value) };\n      case \"CL\":\n        return { valid: clId(input.value) };\n      case \"CN\":\n        return { valid: cnId(input.value) };\n      case \"CO\":\n        return { valid: coId(input.value) };\n      case \"CZ\":\n        return { valid: czId(input.value) };\n      case \"DK\":\n        return { valid: dkId(input.value) };\n      case \"EE\":\n        return { valid: ltId(input.value) };\n      case \"ES\":\n        return { valid: esId(input.value) };\n      case \"FI\":\n        return { valid: fiId(input.value) };\n      case \"FR\":\n        return { valid: frId(input.value) };\n      case \"HK\":\n        return { valid: hkId(input.value) };\n      case \"HR\":\n        return { valid: hrId(input.value) };\n      case \"ID\":\n        return { valid: idId(input.value) };\n      case \"IE\":\n        return { valid: ieId(input.value) };\n      case \"IL\":\n        return { valid: ilId(input.value) };\n      case \"IS\":\n        return { valid: isId(input.value) };\n      case \"KR\":\n        return { valid: krId(input.value) };\n      case \"LT\":\n        return { valid: ltId(input.value) };\n      case \"LV\":\n        return { valid: lvId(input.value) };\n      case \"ME\":\n        return { valid: jmbg(input.value, \"ME\") };\n      case \"MK\":\n        return { valid: jmbg(input.value, \"MK\") };\n      case \"MX\":\n        return { valid: mxId(input.value) };\n      case \"MY\":\n        return { valid: myId(input.value) };\n      case \"NL\":\n        return { valid: nlId(input.value) };\n      case \"NO\":\n        return { valid: noId(input.value) };\n      case \"PE\":\n        return { valid: peId(input.value) };\n      case \"PL\":\n        return { valid: plId(input.value) };\n      case \"RO\":\n        return { valid: roId(input.value) };\n      case \"RS\":\n        return { valid: jmbg(input.value, \"RS\") };\n      case \"SE\":\n        return { valid: seId(input.value) };\n      case \"SI\":\n        return { valid: jmbg(input.value, \"SI\") };\n      case \"SK\":\n        return { valid: czId(input.value) };\n      case \"SM\":\n        return { valid: smId(input.value) };\n      case \"TH\":\n        return { valid: thId(input.value) };\n      case \"TR\":\n        return { valid: trId(input.value) };\n      case \"TW\":\n        return { valid: twId(input.value) };\n      case \"UY\":\n        return { valid: uyId(input.value) };\n      case \"ZA\":\n        return { valid: zaId(input.value) };\n      default:\n        return { valid: true };\n    }\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst KEYWORD_COLORS = new Set([\n  \"aliceblue\",\n  \"antiquewhite\",\n  \"aqua\",\n  \"aquamarine\",\n  \"azure\",\n  \"beige\",\n  \"bisque\",\n  \"black\",\n  \"blanchedalmond\",\n  \"blue\",\n  \"blueviolet\",\n  \"brown\",\n  \"burlywood\",\n  \"cadetblue\",\n  \"chartreuse\",\n  \"chocolate\",\n  \"coral\",\n  \"cornflowerblue\",\n  \"cornsilk\",\n  \"crimson\",\n  \"cyan\",\n  \"darkblue\",\n  \"darkcyan\",\n  \"darkgoldenrod\",\n  \"darkgray\",\n  \"darkgreen\",\n  \"darkgrey\",\n  \"darkkhaki\",\n  \"darkmagenta\",\n  \"darkolivegreen\",\n  \"darkorange\",\n  \"darkorchid\",\n  \"darkred\",\n  \"darksalmon\",\n  \"darkseagreen\",\n  \"darkslateblue\",\n  \"darkslategray\",\n  \"darkslategrey\",\n  \"darkturquoise\",\n  \"darkviolet\",\n  \"deeppink\",\n  \"deepskyblue\",\n  \"dimgray\",\n  \"dimgrey\",\n  \"dodgerblue\",\n  \"firebrick\",\n  \"floralwhite\",\n  \"forestgreen\",\n  \"fuchsia\",\n  \"gainsboro\",\n  \"ghostwhite\",\n  \"gold\",\n  \"goldenrod\",\n  \"gray\",\n  \"green\",\n  \"greenyellow\",\n  \"grey\",\n  \"honeydew\",\n  \"hotpink\",\n  \"indianred\",\n  \"indigo\",\n  \"ivory\",\n  \"khaki\",\n  \"lavender\",\n  \"lavenderblush\",\n  \"lawngreen\",\n  \"lemonchiffon\",\n  \"lightblue\",\n  \"lightcoral\",\n  \"lightcyan\",\n  \"lightgoldenrodyellow\",\n  \"lightgray\",\n  \"lightgreen\",\n  \"lightgrey\",\n  \"lightpink\",\n  \"lightsalmon\",\n  \"lightseagreen\",\n  \"lightskyblue\",\n  \"lightslategray\",\n  \"lightslategrey\",\n  \"lightsteelblue\",\n  \"lightyellow\",\n  \"lime\",\n  \"limegreen\",\n  \"linen\",\n  \"magenta\",\n  \"maroon\",\n  \"mediumaquamarine\",\n  \"mediumblue\",\n  \"mediumorchid\",\n  \"mediumpurple\",\n  \"mediumseagreen\",\n  \"mediumslateblue\",\n  \"mediumspringgreen\",\n  \"mediumturquoise\",\n  \"mediumvioletred\",\n  \"midnightblue\",\n  \"mintcream\",\n  \"mistyrose\",\n  \"moccasin\",\n  \"navajowhite\",\n  \"navy\",\n  \"oldlace\",\n  \"olive\",\n  \"olivedrab\",\n  \"orange\",\n  \"orangered\",\n  \"orchid\",\n  \"palegoldenrod\",\n  \"palegreen\",\n  \"paleturquoise\",\n  \"palevioletred\",\n  \"papayawhip\",\n  \"peachpuff\",\n  \"peru\",\n  \"pink\",\n  \"plum\",\n  \"powderblue\",\n  \"purple\",\n  \"red\",\n  \"rosybrown\",\n  \"royalblue\",\n  \"saddlebrown\",\n  \"salmon\",\n  \"sandybrown\",\n  \"seagreen\",\n  \"seashell\",\n  \"sienna\",\n  \"silver\",\n  \"skyblue\",\n  \"slateblue\",\n  \"slategray\",\n  \"slategrey\",\n  \"snow\",\n  \"springgreen\",\n  \"steelblue\",\n  \"tan\",\n  \"teal\",\n  \"thistle\",\n  \"tomato\",\n  \"transparent\",\n  \"turquoise\",\n  \"violet\",\n  \"wheat\",\n  \"white\",\n  \"whitesmoke\",\n  \"yellow\",\n  \"yellowgreen\",\n]);\n\nconst SUPPORTED_TYPES = [\"hex\", \"rgb\", \"rgba\", \"hsl\", \"hsla\", \"keyword\"] as const;\n\nfunction isHex(v: string) {\n  return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(v);\n}\nfunction isRgb(v: string) {\n  return (\n    /^rgb\\((\\s*(\\b([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\b)\\s*,){2}(\\s*(\\b([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\b)\\s*)\\)$/.test(\n      v,\n    ) || /^rgb\\((\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*,){2}(\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*)\\)$/.test(v)\n  );\n}\nfunction isRgba(v: string) {\n  return (\n    /^rgba\\((\\s*(\\b([01]?\\d{1,2}|2[0-4]\\d|25[0-5])\\b)\\s*,){3}(\\s*(0?(\\.\\d+)?|1(\\.0+)?)\\s*)\\)$/.test(\n      v,\n    ) || /^rgba\\((\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*,){3}(\\s*(0?(\\.\\d+)?|1(\\.0+)?)\\s*)\\)$/.test(v)\n  );\n}\nfunction isHsl(v: string) {\n  return /^hsl\\((\\s*(-?\\d+)\\s*,)(\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*,)(\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*)\\)$/.test(\n    v,\n  );\n}\nfunction isHsla(v: string) {\n  return /^hsla\\((\\s*(-?\\d+)\\s*,)(\\s*(\\b(0?\\d{1,2}|100)\\b%)\\s*,){2}(\\s*(0?(\\.\\d+)?|1(\\.0+)?)\\s*)\\)$/.test(\n    v,\n  );\n}\nfunction isKeyword(v: string) {\n  return KEYWORD_COLORS.has(v.toLowerCase());\n}\n\nconst CHECKERS: Record<string, (v: string) => boolean> = {\n  hex: isHex,\n  rgb: isRgb,\n  rgba: isRgba,\n  hsl: isHsl,\n  hsla: isHsla,\n  keyword: isKeyword,\n};\n\nexport const color: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const rawType = input.options.type as string | string[] | undefined;\n    const types: string[] = Array.isArray(rawType)\n      ? rawType\n      : typeof rawType === \"string\"\n        ? rawType.split(\",\").map((t) => t.trim())\n        : [...SUPPORTED_TYPES];\n    for (const t of types) {\n      const checker = CHECKERS[t.toLowerCase()];\n      if (checker?.(input.value)) return { valid: true };\n    }\n    return { valid: false };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nfunction round(input: number, precision: number): number {\n  const m = 10 ** precision;\n  const x = input * m;\n  const sign = x === 0 ? 0 : x > 0 ? 1 : -1;\n  const isHalf = x % 1 === 0.5 * sign;\n  return isHalf ? (Math.floor(x) + (sign > 0 ? 1 : 0)) / m : Math.round(x) / m;\n}\n\nfunction floatMod(x: number, y: number): number {\n  if (y === 0.0) return 1.0;\n  const dotX = `${x}`.split(\".\");\n  const dotY = `${y}`.split(\".\");\n  const precision =\n    (dotX.length === 1 ? 0 : dotX[1].length) + (dotY.length === 1 ? 0 : dotY[1].length);\n  return round(x - y * Math.floor(x / y), precision);\n}\n\nexport const step: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const v = Number.parseFloat(input.value);\n    if (Number.isNaN(v) || !Number.isFinite(v)) return { valid: false };\n    const opts = { baseValue: 0, step: 1, ...input.options } as {\n      baseValue: number;\n      step: number;\n    };\n    const mod = floatMod(v - opts.baseValue, opts.step);\n    return { valid: mod === 0.0 || mod === opts.step };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst TRANSLITERATION: Record<string, number> = {\n  A: 1,\n  B: 2,\n  C: 3,\n  D: 4,\n  E: 5,\n  F: 6,\n  G: 7,\n  H: 8,\n  J: 1,\n  K: 2,\n  L: 3,\n  M: 4,\n  N: 5,\n  P: 7,\n  R: 9,\n  S: 2,\n  T: 3,\n  U: 4,\n  V: 5,\n  W: 6,\n  X: 7,\n  Y: 8,\n  Z: 9,\n  \"0\": 0,\n  \"1\": 1,\n  \"2\": 2,\n  \"3\": 3,\n  \"4\": 4,\n  \"5\": 5,\n  \"6\": 6,\n  \"7\": 7,\n  \"8\": 8,\n  \"9\": 9,\n};\nconst WEIGHTS = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2];\n\nexport const vin: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    if (!/^[a-hj-npr-z0-9]{8}[0-9xX][a-hj-npr-z0-9]{8}$/i.test(input.value)) {\n      return { valid: false };\n    }\n    const v = input.value.toUpperCase();\n    let sum = 0;\n    for (let i = 0; i < v.length; i++) {\n      sum += TRANSLITERATION[v[i]] * WEIGHTS[i];\n    }\n    let remainder = `${sum % 11}`;\n    if (remainder === \"10\") remainder = \"X\";\n    return { valid: remainder === v[8] };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const isbn: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n\n    let type: \"ISBN10\" | \"ISBN13\" | null = null;\n    switch (true) {\n      case /^\\d{9}[\\dX]$/.test(input.value):\n      case input.value.length === 13 && /^(\\d+)-(\\d+)-(\\d+)-([\\dX])$/.test(input.value):\n      case input.value.length === 13 && /^(\\d+)\\s(\\d+)\\s(\\d+)\\s([\\dX])$/.test(input.value):\n        type = \"ISBN10\";\n        break;\n      case /^(978|979)\\d{9}[\\dX]$/.test(input.value):\n      case input.value.length === 17 && /^(978|979)-(\\d+)-(\\d+)-(\\d+)-([\\dX])$/.test(input.value):\n      case input.value.length === 17 &&\n        /^(978|979)\\s(\\d+)\\s(\\d+)\\s(\\d+)\\s([\\dX])$/.test(input.value):\n        type = \"ISBN13\";\n        break;\n      default:\n        return { valid: false };\n    }\n\n    const chars = input.value.replace(/[^0-9X]/gi, \"\").split(\"\");\n    const length = chars.length;\n    let sum = 0;\n    let checksum: number | string;\n\n    if (type === \"ISBN10\") {\n      for (let i = 0; i < length - 1; i++) {\n        sum += Number.parseInt(chars[i], 10) * (10 - i);\n      }\n      checksum = 11 - (sum % 11);\n      if (checksum === 11) checksum = 0;\n      else if (checksum === 10) checksum = \"X\";\n      return { valid: `${checksum}` === chars[length - 1] };\n    }\n\n    // ISBN13\n    for (let i = 0; i < length - 1; i++) {\n      sum += Number.parseInt(chars[i], 10) * (i % 2 === 0 ? 1 : 3);\n    }\n    checksum = 10 - (sum % 10);\n    if (checksum === 10) checksum = 0;\n    return { valid: `${checksum}` === chars[length - 1] };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const ismn: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n\n    let type: \"ISMN10\" | \"ISMN13\" | null = null;\n    switch (true) {\n      case /^M\\d{9}$/.test(input.value):\n      case /^M-\\d{4}-\\d{4}-\\d{1}$/.test(input.value):\n      case /^M\\s\\d{4}\\s\\d{4}\\s\\d{1}$/.test(input.value):\n        type = \"ISMN10\";\n        break;\n      case /^9790\\d{9}$/.test(input.value):\n      case /^979-0-\\d{4}-\\d{4}-\\d{1}$/.test(input.value):\n      case /^979\\s0\\s\\d{4}\\s\\d{4}\\s\\d{1}$/.test(input.value):\n        type = \"ISMN13\";\n        break;\n      default:\n        return { valid: false };\n    }\n\n    // ISMN-10: replace M-prefix with '9790'\n    let v = type === \"ISMN10\" ? `9790${input.value.substring(1)}` : input.value;\n    v = v.replace(/[^0-9]/gi, \"\");\n    const length = v.length;\n    const weight = [1, 3];\n    let sum = 0;\n    for (let i = 0; i < length - 1; i++) {\n      sum += Number.parseInt(v.charAt(i), 10) * weight[i % 2];\n    }\n    sum = (10 - (sum % 10)) % 10;\n    return { valid: `${sum}` === v.charAt(length - 1) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const ean: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    if (!/^(\\d{8}|\\d{12}|\\d{13}|\\d{14})$/.test(input.value)) return { valid: false };\n    const length = input.value.length;\n    const weight = length === 8 ? [3, 1] : [1, 3];\n    let sum = 0;\n    for (let i = 0; i < length - 1; i++) {\n      sum += Number.parseInt(input.value.charAt(i), 10) * weight[i % 2];\n    }\n    sum = (10 - (sum % 10)) % 10;\n    return { valid: `${sum}` === input.value.charAt(length - 1) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const issn: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    if (!/^\\d{4}-\\d{3}[\\dX]$/.test(input.value)) return { valid: false };\n    const chars = input.value.replace(/[^0-9X]/gi, \"\").split(\"\");\n    if (chars[7] === \"X\") chars[7] = \"10\";\n    let sum = 0;\n    for (let i = 0; i < chars.length; i++) {\n      sum += Number.parseInt(chars[i], 10) * (8 - i);\n    }\n    return { valid: sum % 11 === 0 };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst SEDOL_WEIGHT = [1, 3, 1, 7, 3, 9, 1];\n\nexport const sedol: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const v = input.value.toUpperCase();\n    if (!/^[0-9BCDFGHJKLMNPQRSTVWXYZ]{7}$/.test(v)) return { valid: false };\n    let sum = 0;\n    for (let i = 0; i < v.length - 1; i++) {\n      sum += SEDOL_WEIGHT[i] * Number.parseInt(v.charAt(i), 36);\n    }\n    sum = (10 - (sum % 10)) % 10;\n    return { valid: `${sum}` === v.charAt(v.length - 1) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst ALPHABET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\nfunction mod37And36(value: string): boolean {\n  const modulus = ALPHABET.length;\n  let check = Math.floor(modulus / 2);\n  for (let i = 0; i < value.length; i++) {\n    check =\n      ((((check || modulus) * 2) % (modulus + 1)) + ALPHABET.indexOf(value.charAt(i))) % modulus;\n  }\n  return check === 1;\n}\n\nexport const grid: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const v = input.value.toUpperCase();\n    if (\n      !/^(GRID:)?([0-9A-Z]{2})[-\\s]*([0-9A-Z]{5})[-\\s]*([0-9A-Z]{10})[-\\s]*([0-9A-Z]{1})$/.test(v)\n    ) {\n      return { valid: false };\n    }\n    let clean = v.replace(/\\s/g, \"\").replace(/-/g, \"\");\n    if (clean.startsWith(\"GRID:\")) clean = clean.substring(5);\n    return { valid: mod37And36(clean) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const cusip: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const value = input.value.toUpperCase();\n    // O and I are not allowed\n    if (!/^[0123456789ABCDEFGHJKLMNPQRSTUVWXYZ*@#]{9}$/.test(value)) return { valid: false };\n    const lastChar = value[value.length - 1];\n    const chars = value.slice(0, 8).split(\"\");\n    const converted = chars.map((c) => {\n      const code = c.charCodeAt(0);\n      if (c === \"*\") return 36;\n      if (c === \"@\") return 37;\n      if (c === \"#\") return 38;\n      if (code >= 65 && code <= 90) return code - 55; // A=10 ... Z=35\n      return Number.parseInt(c, 10);\n    });\n    const sum = converted\n      .map((val, i) => {\n        const d = i % 2 === 0 ? val : 2 * val;\n        return Math.floor(d / 10) + (d % 10);\n      })\n      .reduce((a, b) => a + b, 0);\n    const checkDigit = (10 - (sum % 10)) % 10;\n    return { valid: lastChar === `${checkDigit}` };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst COUNTRY_CODES = new Set(\n  (\n    \"AF|AX|AL|DZ|AS|AD|AO|AI|AQ|AG|AR|AM|AW|AU|AT|AZ|BS|BH|BD|BB|BY|BE|BZ|BJ|BM|BT|BO|BQ|BA|BW|\" +\n    \"BV|BR|IO|BN|BG|BF|BI|KH|CM|CA|CV|KY|CF|TD|CL|CN|CX|CC|CO|KM|CG|CD|CK|CR|CI|HR|CU|CW|CY|CZ|DK|DJ|DM|DO|EC|EG|\" +\n    \"SV|GQ|ER|EE|ET|FK|FO|FJ|FI|FR|GF|PF|TF|GA|GM|GE|DE|GH|GI|GR|GL|GD|GP|GU|GT|GG|GN|GW|GY|HT|HM|VA|HN|HK|HU|IS|\" +\n    \"IN|ID|IR|IQ|IE|IM|IL|IT|JM|JP|JE|JO|KZ|KE|KI|KP|KR|KW|KG|LA|LV|LB|LS|LR|LY|LI|LT|LU|MO|MK|MG|MW|MY|MV|ML|MT|\" +\n    \"MH|MQ|MR|MU|YT|MX|FM|MD|MC|MN|ME|MS|MA|MZ|MM|NA|NR|NP|NL|NC|NZ|NI|NE|NG|NU|NF|MP|NO|OM|PK|PW|PS|PA|PG|PY|PE|\" +\n    \"PH|PN|PL|PT|PR|QA|RE|RO|RU|RW|BL|SH|KN|LC|MF|PM|VC|WS|SM|ST|SA|SN|RS|SC|SL|SG|SX|SK|SI|SB|SO|ZA|GS|SS|ES|LK|\" +\n    \"SD|SR|SJ|SZ|SE|CH|SY|TW|TJ|TZ|TH|TL|TG|TK|TO|TT|TN|TR|TM|TC|TV|UG|UA|AE|GB|US|UM|UY|UZ|VU|VE|VN|VG|VI|WF|EH|\" +\n    \"YE|ZM|ZW\"\n  ).split(\"|\"),\n);\n\nexport const isin: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const v = input.value.toUpperCase();\n    if (!/^[A-Z]{2}[0-9A-Z]{10}$/.test(v)) return { valid: false };\n    if (!COUNTRY_CODES.has(v.substring(0, 2))) return { valid: false };\n\n    // Convert letters A=10, B=11 ... Z=35, then flatten all digits\n    let converted = \"\";\n    for (let i = 0; i < v.length - 1; i++) {\n      const c = v.charCodeAt(i);\n      converted += c > 57 ? (c - 55).toString() : v.charAt(i);\n    }\n\n    // Double every other digit (Luhn-like)\n    const n = converted.length;\n    const group = n % 2 !== 0 ? 0 : 1;\n    let digits = \"\";\n    for (let i = 0; i < n; i++) {\n      digits += (Number.parseInt(converted[i], 10) * (i % 2 === group ? 2 : 1)).toString();\n    }\n\n    let sum = 0;\n    for (let i = 0; i < digits.length; i++) {\n      sum += Number.parseInt(digits.charAt(i), 10);\n    }\n    sum = (10 - (sum % 10)) % 10;\n    return { valid: `${sum}` === v.charAt(v.length - 1) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst LUHN_TABLE = [\n  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n  [0, 2, 4, 6, 8, 1, 3, 5, 7, 9],\n];\n\nfunction luhn(value: string): boolean {\n  let mul = 0;\n  let sum = 0;\n  let length = value.length;\n  while (length--) {\n    sum += LUHN_TABLE[mul][Number.parseInt(value.charAt(length), 10)];\n    mul = 1 - mul;\n  }\n  return sum % 10 === 0 && sum > 0;\n}\n\nexport const imei: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    switch (true) {\n      // 15-digit with optional hyphens or spaces\n      case /^\\d{15}$/.test(input.value):\n      case /^\\d{2}-\\d{6}-\\d{6}-\\d{1}$/.test(input.value):\n      case /^\\d{2}\\s\\d{6}\\s\\d{6}\\s\\d{1}$/.test(input.value):\n        return { valid: luhn(input.value.replace(/[^0-9]/g, \"\")) };\n      // 14 or 16 digits (no check digit required), or with optional 2-digit suffix\n      case /^\\d{14}$/.test(input.value):\n      case /^\\d{16}$/.test(input.value):\n      case /^\\d{2}-\\d{6}-\\d{6}(|-\\d{2})$/.test(input.value):\n      case /^\\d{2}\\s\\d{6}\\s\\d{6}(|\\s\\d{2})$/.test(input.value):\n        return { valid: true };\n      default:\n        return { valid: false };\n    }\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const imo: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    if (!/^IMO \\d{7}$/i.test(input.value)) return { valid: false };\n    const digits = input.value.replace(/^.*(\\d{7})$/, \"$1\");\n    let sum = 0;\n    for (let i = 6; i >= 1; i--) {\n      sum += Number.parseInt(digits.charAt(6 - i), 10) * (i + 1);\n    }\n    return { valid: sum % 10 === Number.parseInt(digits.charAt(6), 10) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst LUHN_TABLE = [\n  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n  [0, 2, 4, 6, 8, 1, 3, 5, 7, 9],\n];\n\nfunction luhn(value: string): boolean {\n  let mul = 0;\n  let sum = 0;\n  let length = value.length;\n  while (length--) {\n    sum += LUHN_TABLE[mul][Number.parseInt(value.charAt(length), 10)];\n    mul = 1 - mul;\n  }\n  return sum % 10 === 0 && sum > 0;\n}\n\nfunction hexCheckValid(v: string): boolean {\n  // v is the full 15-char hex MEID (uppercase, separators already stripped)\n  const cd = v.charAt(v.length - 1).toUpperCase();\n  const body = v.slice(0, -1); // first 14 chars\n  let checkDigit = \"\";\n  for (let i = 1; i <= 13; i += 2) {\n    checkDigit += (Number.parseInt(body.charAt(i), 16) * 2).toString(16);\n  }\n  let sum = 0;\n  for (let i = 0; i < checkDigit.length; i++) {\n    sum += Number.parseInt(checkDigit.charAt(i), 16);\n  }\n  if (sum % 10 === 0) return cd === \"0\";\n  return cd === ((Math.floor((sum + 10) / 10) * 10 - sum) * 2).toString(16).toUpperCase();\n}\n\nexport const meid: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    const v = input.value;\n\n    // Hex formats with check digit (15 chars)\n    if (\n      /^[0-9A-F]{15}$/i.test(v) ||\n      /^[0-9A-F]{2}[- ][0-9A-F]{6}[- ][0-9A-F]{6}[- ][0-9A-F]$/i.test(v)\n    ) {\n      const clean = v.replace(/[- ]/g, \"\");\n      if (/^\\d+$/.test(clean)) return { valid: luhn(clean) };\n      return { valid: hexCheckValid(clean.toUpperCase()) };\n    }\n\n    // Decimal format with check digit (19 digits)\n    if (/^\\d{19}$/.test(v) || /^\\d{5}[- ]\\d{5}[- ]\\d{4}[- ]\\d{4}[- ]\\d$/.test(v)) {\n      return { valid: luhn(v.replace(/[- ]/g, \"\")) };\n    }\n\n    // Hex/decimal without check digit (14 hex or 18 decimal) — always valid\n    if (\n      /^[0-9A-F]{14}$/i.test(v) ||\n      /^[0-9A-F]{2}[- ][0-9A-F]{6}[- ][0-9A-F]{6}$/i.test(v) ||\n      /^\\d{18}$/.test(v) ||\n      /^\\d{5}[- ]\\d{5}[- ]\\d{4}[- ]\\d{4}$/.test(v)\n    ) {\n      return { valid: true };\n    }\n\n    return { valid: false };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst VALID_PREFIXES = new Set([\n  // Andover\n  \"10\",\n  \"12\",\n  // Atlanta\n  \"60\",\n  \"67\",\n  // Austin\n  \"50\",\n  \"53\",\n  // Brookhaven\n  \"01\",\n  \"02\",\n  \"03\",\n  \"04\",\n  \"05\",\n  \"06\",\n  \"11\",\n  \"13\",\n  \"14\",\n  \"16\",\n  \"21\",\n  \"22\",\n  \"23\",\n  \"25\",\n  \"34\",\n  \"51\",\n  \"52\",\n  \"54\",\n  \"55\",\n  \"56\",\n  \"57\",\n  \"58\",\n  \"59\",\n  \"65\",\n  // Cincinnati\n  \"30\",\n  \"32\",\n  \"35\",\n  \"36\",\n  \"37\",\n  \"38\",\n  \"61\",\n  // Fresno\n  \"15\",\n  \"24\",\n  // Internet\n  \"20\",\n  \"26\",\n  \"27\",\n  \"45\",\n  \"46\",\n  \"47\",\n  // Kansas City\n  \"40\",\n  \"44\",\n  // Memphis\n  \"94\",\n  \"95\",\n  // Ogden\n  \"80\",\n  \"90\",\n  // Philadelphia\n  \"33\",\n  \"39\",\n  \"41\",\n  \"42\",\n  \"43\",\n  \"48\",\n  \"62\",\n  \"63\",\n  \"64\",\n  \"66\",\n  \"68\",\n  \"71\",\n  \"72\",\n  \"73\",\n  \"74\",\n  \"75\",\n  \"76\",\n  \"77\",\n  \"81\",\n  \"82\",\n  \"83\",\n  \"84\",\n  \"85\",\n  \"86\",\n  \"87\",\n  \"88\",\n  \"91\",\n  \"92\",\n  \"93\",\n  \"98\",\n  \"99\",\n  // Small Business Administration\n  \"31\",\n]);\n\nexport const ein: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    if (!/^[0-9]{2}-?[0-9]{7}$/.test(input.value)) return { valid: false };\n    return { valid: VALID_PREFIXES.has(input.value.substring(0, 2)) };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const rtn: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    if (!/^\\d{9}$/.test(input.value)) return { valid: false };\n    let sum = 0;\n    for (let i = 0; i < input.value.length; i += 3) {\n      sum +=\n        Number.parseInt(input.value.charAt(i), 10) * 3 +\n        Number.parseInt(input.value.charAt(i + 1), 10) * 7 +\n        Number.parseInt(input.value.charAt(i + 2), 10);\n    }\n    return { valid: sum !== 0 && sum % 10 === 0 };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst LUHN_TABLE = [\n  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n  [0, 2, 4, 6, 8, 1, 3, 5, 7, 9],\n];\n\nfunction luhn(value: string): boolean {\n  let mul = 0;\n  let sum = 0;\n  let length = value.length;\n  while (length--) {\n    sum += LUHN_TABLE[mul][Number.parseInt(value.charAt(length), 10)];\n    mul = 1 - mul;\n  }\n  return sum % 10 === 0 && sum > 0;\n}\n\nexport const siren: ValidatorFactory = () => ({\n  validate(input) {\n    return {\n      valid: input.value === \"\" || (/^\\d{9}$/.test(input.value) && luhn(input.value)),\n    };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nexport const siret: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n    if (!/^\\d{14}$/.test(input.value)) return { valid: false };\n    let sum = 0;\n    for (let i = 0; i < input.value.length; i++) {\n      let tmp = Number.parseInt(input.value.charAt(i), 10);\n      if (i % 2 === 0) {\n        tmp *= 2;\n        if (tmp > 9) tmp -= 9;\n      }\n      sum += tmp;\n    }\n    return { valid: sum % 10 === 0 };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst IBAN_PATTERNS: Record<string, string> = {\n  AD: \"AD[0-9]{2}[0-9]{4}[0-9]{4}[A-Z0-9]{12}\",\n  AE: \"AE[0-9]{2}[0-9]{3}[0-9]{16}\",\n  AL: \"AL[0-9]{2}[0-9]{8}[A-Z0-9]{16}\",\n  AO: \"AO[0-9]{2}[0-9]{21}\",\n  AT: \"AT[0-9]{2}[0-9]{5}[0-9]{11}\",\n  AZ: \"AZ[0-9]{2}[A-Z]{4}[A-Z0-9]{20}\",\n  BA: \"BA[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}\",\n  BE: \"BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}\",\n  BF: \"BF[0-9]{2}[0-9]{23}\",\n  BG: \"BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}\",\n  BH: \"BH[0-9]{2}[A-Z]{4}[A-Z0-9]{14}\",\n  BI: \"BI[0-9]{2}[0-9]{12}\",\n  BJ: \"BJ[0-9]{2}[A-Z]{1}[0-9]{23}\",\n  BR: \"BR[0-9]{2}[0-9]{8}[0-9]{5}[0-9]{10}[A-Z][A-Z0-9]\",\n  CH: \"CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}\",\n  CI: \"CI[0-9]{2}[A-Z]{1}[0-9]{23}\",\n  CM: \"CM[0-9]{2}[0-9]{23}\",\n  CR: \"CR[0-9]{2}[0-9][0-9]{3}[0-9]{14}\",\n  CV: \"CV[0-9]{2}[0-9]{21}\",\n  CY: \"CY[0-9]{2}[0-9]{3}[0-9]{5}[A-Z0-9]{16}\",\n  CZ: \"CZ[0-9]{2}[0-9]{20}\",\n  DE: \"DE[0-9]{2}[0-9]{8}[0-9]{10}\",\n  DK: \"DK[0-9]{2}[0-9]{14}\",\n  DO: \"DO[0-9]{2}[A-Z0-9]{4}[0-9]{20}\",\n  DZ: \"DZ[0-9]{2}[0-9]{20}\",\n  EE: \"EE[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}\",\n  ES: \"ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}\",\n  FI: \"FI[0-9]{2}[0-9]{6}[0-9]{7}[0-9]{1}\",\n  FO: \"FO[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}\",\n  FR: \"FR[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}\",\n  GB: \"GB[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}\",\n  GE: \"GE[0-9]{2}[A-Z]{2}[0-9]{16}\",\n  GI: \"GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}\",\n  GL: \"GL[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}\",\n  GR: \"GR[0-9]{2}[0-9]{3}[0-9]{4}[A-Z0-9]{16}\",\n  GT: \"GT[0-9]{2}[A-Z0-9]{4}[A-Z0-9]{20}\",\n  HR: \"HR[0-9]{2}[0-9]{7}[0-9]{10}\",\n  HU: \"HU[0-9]{2}[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}\",\n  IE: \"IE[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}\",\n  IL: \"IL[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{13}\",\n  IR: \"IR[0-9]{2}[0-9]{22}\",\n  IS: \"IS[0-9]{2}[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}\",\n  IT: \"IT[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}\",\n  JO: \"JO[0-9]{2}[A-Z]{4}[0-9]{4}[0]{8}[A-Z0-9]{10}\",\n  KW: \"KW[0-9]{2}[A-Z]{4}[0-9]{22}\",\n  KZ: \"KZ[0-9]{2}[0-9]{3}[A-Z0-9]{13}\",\n  LB: \"LB[0-9]{2}[0-9]{4}[A-Z0-9]{20}\",\n  LI: \"LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}\",\n  LT: \"LT[0-9]{2}[0-9]{5}[0-9]{11}\",\n  LU: \"LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}\",\n  LV: \"LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}\",\n  MC: \"MC[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}\",\n  MD: \"MD[0-9]{2}[A-Z0-9]{20}\",\n  ME: \"ME[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}\",\n  MG: \"MG[0-9]{2}[0-9]{23}\",\n  MK: \"MK[0-9]{2}[0-9]{3}[A-Z0-9]{10}[0-9]{2}\",\n  ML: \"ML[0-9]{2}[A-Z]{1}[0-9]{23}\",\n  MR: \"MR13[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}\",\n  MT: \"MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}\",\n  MU: \"MU[0-9]{2}[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}\",\n  MZ: \"MZ[0-9]{2}[0-9]{21}\",\n  NL: \"NL[0-9]{2}[A-Z]{4}[0-9]{10}\",\n  NO: \"NO[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{1}\",\n  PK: \"PK[0-9]{2}[A-Z]{4}[A-Z0-9]{16}\",\n  PL: \"PL[0-9]{2}[0-9]{8}[0-9]{16}\",\n  PS: \"PS[0-9]{2}[A-Z]{4}[A-Z0-9]{21}\",\n  PT: \"PT[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}\",\n  QA: \"QA[0-9]{2}[A-Z]{4}[A-Z0-9]{21}\",\n  RO: \"RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}\",\n  RS: \"RS[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}\",\n  SA: \"SA[0-9]{2}[0-9]{2}[A-Z0-9]{18}\",\n  SE: \"SE[0-9]{2}[0-9]{3}[0-9]{16}[0-9]{1}\",\n  SI: \"SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}\",\n  SK: \"SK[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{10}\",\n  SM: \"SM[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}\",\n  SN: \"SN[0-9]{2}[A-Z]{1}[0-9]{23}\",\n  TL: \"TL38[0-9]{3}[0-9]{14}[0-9]{2}\",\n  TN: \"TN59[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}\",\n  TR: \"TR[0-9]{2}[0-9]{5}[A-Z0-9]{1}[A-Z0-9]{16}\",\n  VG: \"VG[0-9]{2}[A-Z]{4}[0-9]{16}\",\n  XK: \"XK[0-9]{2}[0-9]{4}[0-9]{10}[0-9]{2}\",\n};\n\nconst SEPA_COUNTRIES = new Set([\n  \"AT\",\n  \"BE\",\n  \"BG\",\n  \"CH\",\n  \"CY\",\n  \"CZ\",\n  \"DE\",\n  \"DK\",\n  \"EE\",\n  \"ES\",\n  \"FI\",\n  \"FR\",\n  \"GB\",\n  \"GI\",\n  \"GR\",\n  \"HR\",\n  \"HU\",\n  \"IE\",\n  \"IS\",\n  \"IT\",\n  \"LI\",\n  \"LT\",\n  \"LU\",\n  \"LV\",\n  \"MC\",\n  \"MT\",\n  \"NL\",\n  \"NO\",\n  \"PL\",\n  \"PT\",\n  \"RO\",\n  \"SE\",\n  \"SI\",\n  \"SK\",\n  \"SM\",\n]);\n\nexport const iban: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n\n    const clean = input.value.replace(/[^a-zA-Z0-9]/g, \"\").toUpperCase();\n    const country = (input.options.country as string | undefined) || clean.slice(0, 2);\n\n    if (!IBAN_PATTERNS[country]) return { valid: false };\n\n    const sepa = input.options.sepa;\n    if (sepa === true || sepa === \"true\") {\n      if (!SEPA_COUNTRIES.has(country)) return { valid: false };\n    } else if (sepa === false || sepa === \"false\") {\n      if (SEPA_COUNTRIES.has(country)) return { valid: false };\n    }\n\n    if (!new RegExp(`^${IBAN_PATTERNS[country]}$`).test(clean)) return { valid: false };\n\n    // ISO 7064 mod-97: move first 4 chars to end, replace A-Z with 10-35\n    const rearranged = clean.slice(4) + clean.slice(0, 4);\n    const digits = rearranged\n      .split(\"\")\n      .map((n) => {\n        const code = n.charCodeAt(0);\n        return code >= 65 && code <= 90 ? String(code - 55) : n;\n      })\n      .join(\"\");\n\n    let temp = Number.parseInt(digits.charAt(0), 10);\n    for (let i = 1; i < digits.length; i++) {\n      temp = (temp * 10 + Number.parseInt(digits.charAt(i), 10)) % 97;\n    }\n    return { valid: temp === 1 };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst COUNTRY_CODES = new Set([\n  \"AE\",\n  \"BG\",\n  \"BR\",\n  \"CN\",\n  \"CZ\",\n  \"DE\",\n  \"DK\",\n  \"ES\",\n  \"FR\",\n  \"GB\",\n  \"IN\",\n  \"MA\",\n  \"NL\",\n  \"PK\",\n  \"RO\",\n  \"RU\",\n  \"SK\",\n  \"TH\",\n  \"US\",\n  \"VE\",\n]);\n\nexport const phone: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n\n    const country = ((input.options.country as string | undefined) || \"\").toUpperCase();\n    if (!country || !COUNTRY_CODES.has(country)) return { valid: true };\n\n    const v = input.value.trim();\n    let isValid = true;\n\n    switch (country) {\n      case \"AE\":\n        isValid =\n          /^(((\\+|00)?971[\\s.-]?(\\(0\\)[\\s.-]?)?|0)(\\(5(0|2|5|6)\\)|5(0|2|5|6)|2|3|4|6|7|9)|60)([\\s.-]?[0-9]){7}$/.test(\n            v,\n          );\n        break;\n      case \"BG\":\n        isValid =\n          /^(0|359|00)(((700|900)[0-9]{5}|((800)[0-9]{5}|(800)[0-9]{4}))|(87|88|89)([0-9]{7})|((2[0-9]{7})|(([3-9][0-9])(([0-9]{6})|([0-9]{5})))))$/.test(\n            v.replace(/\\+|\\s|-|\\/|\\(|\\)/gi, \"\"),\n          );\n        break;\n      case \"BR\":\n        isValid =\n          /^(([\\d]{4}[-.\\s]{1}[\\d]{2,3}[-.\\s]{1}[\\d]{2}[-.\\s]{1}[\\d]{2})|([\\d]{4}[-.\\s]{1}[\\d]{3}[-.\\s]{1}[\\d]{4})|((\\(?\\+?[0-9]{2}\\)?\\s?)?(\\(?\\d{2}\\)?\\s?)?\\d{4,5}[-.\\s]?\\d{4}))$/.test(\n            v,\n          );\n        break;\n      case \"CN\":\n        isValid =\n          /^((00|\\+)?(86(?:-| )))?((\\d{11})|(\\d{3}[- ]{1}\\d{4}[- ]{1}\\d{4})|((\\d{2,4}[- ]){1}(\\d{7,8}|(\\d{3,4}[- ]{1}\\d{4}))([- ]{1}\\d{1,4})?))$/.test(\n            v,\n          );\n        break;\n      case \"CZ\":\n        isValid = /^(((00)([- ]?)|\\+)(420)([- ]?))?((\\d{3})([- ]?)){2}(\\d{3})$/.test(v);\n        break;\n      case \"DE\":\n        isValid =\n          /^(((((((00|\\+)49[ \\-/]?)|0)[1-9][0-9]{1,4})[ \\-/]?)|((((00|\\+)49\\()|\\(0)[1-9][0-9]{1,4}\\)[ \\-/]?))[0-9]{1,7}([ \\-/]?[0-9]{1,5})?)$/.test(\n            v,\n          );\n        break;\n      case \"DK\":\n        isValid = /^(\\+45|0045|\\(45\\))?\\s?[2-9](\\s?\\d){7}$/.test(v);\n        break;\n      case \"ES\":\n        isValid = /^(?:(?:(?:\\+|00)34\\D?))?(?:5|6|7|8|9)(?:\\d\\D?){8}$/.test(v);\n        break;\n      case \"FR\":\n        isValid =\n          /^(?:(?:(?:\\+|00)33[ ]?(?:\\(0\\)[ ]?)?)|0){1}[1-9]{1}([ .-]?)(?:\\d{2}\\1?){3}\\d{2}$/.test(\n            v,\n          );\n        break;\n      case \"GB\":\n        isValid =\n          /^\\(?(?:(?:0(?:0|11)\\)?[\\s-]?\\(?|\\+)44\\)?[\\s-]?\\(?(?:0\\)?[\\s-]?\\(?)?|0)(?:\\d{2}\\)?[\\s-]?\\d{4}[\\s-]?\\d{4}|\\d{3}\\)?[\\s-]?\\d{3}[\\s-]?\\d{3,4}|\\d{4}\\)?[\\s-]?(?:\\d{5}|\\d{3}[\\s-]?\\d{3})|\\d{5}\\)?[\\s-]?\\d{4,5}|8(?:00[\\s-]?11[\\s-]?11|45[\\s-]?46[\\s-]?4\\d))(?:(?:[\\s-]?(?:x|ext\\.?\\s?|#)\\d+)?)$/.test(\n            v,\n          );\n        break;\n      case \"IN\":\n        isValid = /((\\+?)((0[ -]+)*|(91 )*)(\\d{12}|\\d{10}))|\\d{5}([- ]*)\\d{6}/.test(v);\n        break;\n      case \"MA\":\n        isValid =\n          /^(?:(?:(?:\\+|00)212[\\s]?(?:[\\s]?\\(0\\)[\\s]?)?)|0){1}(?:5[\\s.-]?[2-3]|6[\\s.-]?[13-9]){1}[0-9]{1}(?:[\\s.-]?\\d{2}){3}$/.test(\n            v,\n          );\n        break;\n      case \"NL\":\n        isValid =\n          /^((\\+|00(\\s|\\s?-\\s?)?)31(\\s|\\s?-\\s?)?(\\(0\\)[-\\s]?)?|0)[1-9]((\\s|\\s?-\\s?)?[0-9])((\\s|\\s?-\\s?)?[0-9])((\\s|\\s?-\\s?)?[0-9])\\s?[0-9]\\s?[0-9]\\s?[0-9]\\s?[0-9]\\s?[0-9]$/.test(\n            v,\n          );\n        break;\n      case \"PK\":\n        isValid = /^0?3[0-9]{2}[0-9]{7}$/.test(v);\n        break;\n      case \"RO\":\n        isValid =\n          /^(\\+4|)?(07[0-8]{1}[0-9]{1}|02[0-9]{2}|03[0-9]{2}){1}?(\\s|\\.|-)?([0-9]{3}(\\s|\\.|-|)){2}$/.test(\n            v,\n          );\n        break;\n      case \"RU\":\n        isValid = /^((8|\\+7|007)[-./ ]?)?([(/.]?\\d{3}[)/.]?[-./ ]?)?[\\d\\-./ ]{7,10}$/.test(v);\n        break;\n      case \"SK\":\n        isValid = /^(((00)([- ]?)|\\+)(421)([- ]?))?((\\d{3})([- ]?)){2}(\\d{3})$/.test(v);\n        break;\n      case \"TH\":\n        isValid = /^0\\(?([6|8-9]{2})*-([0-9]{3})*-([0-9]{4})$/.test(v);\n        break;\n      case \"VE\":\n        isValid =\n          /^0(?:2(?:12|4[0-9]|5[1-9]|6[0-9]|7[0-8]|8[1-35-8]|9[1-5]|3[45789])|4(?:1[246]|2[46]))\\d{7}$/.test(\n            v,\n          );\n        break;\n      default:\n        isValid = /^(?:(1-?)|(\\+1 ?))?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4}$/.test(v);\n        break;\n    }\n\n    return { valid: isValid };\n  },\n});\n","import type { ValidatorFactory } from \"../core/types\";\n\nconst COUNTRY_CODES = new Set([\n  \"AT\",\n  \"BG\",\n  \"BR\",\n  \"CA\",\n  \"CH\",\n  \"CZ\",\n  \"DE\",\n  \"DK\",\n  \"ES\",\n  \"FR\",\n  \"GB\",\n  \"IE\",\n  \"IN\",\n  \"IT\",\n  \"MA\",\n  \"NL\",\n  \"PL\",\n  \"PT\",\n  \"RO\",\n  \"RU\",\n  \"SE\",\n  \"SG\",\n  \"SK\",\n  \"US\",\n]);\n\nfunction gbValid(value: string): boolean {\n  const regexps = [\n    // AN NAA, ANN NAA, AAN NAA, AANN NAA\n    /^([ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY]?[0-9]{1,2})(\\s*)([0-9][ABDEFGHJLNPQRSTUWXYZ]{2})$/i,\n    // ANA NAA\n    /^([ABCDEFGHIJKLMNOPRSTUWYZ][0-9][ABCDEFGHJKPMNRSTUVWXY])(\\s*)([0-9][ABDEFGHJLNPQRSTUWXYZ]{2})$/i,\n    // AANA NAA\n    /^([ABCDEFGHIJKLMNOPRSTUWYZ][ABCDEFGHKLMNOPQRSTUVWXY][0-9][ABEHMNPRVWXY])(\\s*)([0-9][ABDEFGHJLNPQRSTUWXYZ]{2})$/i,\n    // BFPO postcodes\n    /^(BF1)(\\s*)([0-6][ABDEFGHJLNPQRST][ABDEFGHJLNPQRSTUWZYZ])$/i,\n    /^(GIR)(\\s*)(0AA)$/i,\n    /^(BFPO)(\\s*)([0-9]{1,4})$/i,\n    /^(BFPO)(\\s*)(c\\/o\\s*[0-9]{1,3})$/i,\n    /^([A-Z]{4})(\\s*)(1ZZ)$/i,\n    /^(AI-2640)$/i,\n  ];\n  return regexps.some((r) => r.test(value));\n}\n\nexport const zipCode: ValidatorFactory = () => ({\n  validate(input) {\n    if (input.value === \"\") return { valid: true };\n\n    const country = ((input.options.country as string | undefined) || \"\").toUpperCase();\n    if (!country || !COUNTRY_CODES.has(country)) return { valid: true };\n\n    let isValid = false;\n\n    switch (country) {\n      case \"AT\":\n        isValid = /^([1-9]{1})(\\d{3})$/.test(input.value);\n        break;\n      case \"BG\":\n        isValid = /^([1-9]{1}[0-9]{3})$/.test(input.value);\n        break;\n      case \"BR\":\n        isValid = /^(\\d{2})([.]?)(\\d{3})([-]?)(\\d{3})$/.test(input.value);\n        break;\n      case \"CA\":\n        isValid =\n          /^(?:A|B|C|E|G|H|J|K|L|M|N|P|R|S|T|V|X|Y)[0-9](?:A|B|C|E|G|H|J|K|L|M|N|P|R|S|T|V|W|X|Y|Z)\\s?[0-9](?:A|B|C|E|G|H|J|K|L|M|N|P|R|S|T|V|W|X|Y|Z)[0-9]$/i.test(\n            input.value,\n          );\n        break;\n      case \"CH\":\n        isValid = /^([1-9]{1})(\\d{3})$/.test(input.value);\n        break;\n      case \"CZ\":\n        isValid = /^(\\d{3})([ ]?)(\\d{2})$/.test(input.value);\n        break;\n      case \"DE\":\n        isValid = /^(?!01000|99999)(0[1-9]\\d{3}|[1-9]\\d{4})$/.test(input.value);\n        break;\n      case \"DK\":\n        isValid = /^(DK(-|\\s)?)?\\d{4}$/i.test(input.value);\n        break;\n      case \"ES\":\n        isValid = /^(?:0[1-9]|[1-4][0-9]|5[0-2])\\d{3}$/.test(input.value);\n        break;\n      case \"FR\":\n        isValid = /^[0-9]{5}$/.test(input.value);\n        break;\n      case \"GB\":\n        isValid = gbValid(input.value);\n        break;\n      case \"IE\":\n        isValid = /^(D6W|[ACDEFHKNPRTVWXY]\\d{2})\\s[0-9ACDEFHKNPRTVWXY]{4}$/.test(input.value);\n        break;\n      case \"IN\":\n        isValid = /^\\d{3}\\s?\\d{3}$/.test(input.value);\n        break;\n      case \"IT\":\n        isValid = /^(I-|IT-)?\\d{5}$/i.test(input.value);\n        break;\n      case \"MA\":\n        isValid = /^[1-9][0-9]{4}$/.test(input.value);\n        break;\n      case \"NL\":\n        isValid = /^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i.test(input.value);\n        break;\n      case \"PL\":\n        isValid = /^[0-9]{2}-[0-9]{3}$/.test(input.value);\n        break;\n      case \"PT\":\n        isValid = /^[1-9]\\d{3}-\\d{3}$/.test(input.value);\n        break;\n      case \"RO\":\n        isValid = /^(0[1-8]{1}|[1-9]{1}[0-5]{1})?[0-9]{4}$/.test(input.value);\n        break;\n      case \"RU\":\n        isValid = /^[0-9]{6}$/.test(input.value);\n        break;\n      case \"SE\":\n        isValid = /^(S-)?\\d{3}\\s?\\d{2}$/i.test(input.value);\n        break;\n      case \"SG\":\n        isValid = /^([0][1-9]|[1-6][0-9]|[7]([0-3]|[5-9])|[8][0-2])(\\d{4})$/.test(input.value);\n        break;\n      case \"SK\":\n        isValid = /^(\\d{3})([ ]?)(\\d{2})$/.test(input.value);\n        break;\n      default:\n        isValid = /^\\d{4,5}([-]?\\d{4})?$/.test(input.value);\n        break;\n    }\n\n    return { valid: isValid };\n  },\n});\n","// src/core/Plugin.ts\nimport type { Core } from \"./Core\";\n\nexport abstract class Plugin<T extends Record<string, unknown> = Record<string, unknown>> {\n  /** Options passed by the user when instantiating the plugin */\n  readonly opts: T;\n  /** Set by Core.registerPlugin() before install() is called */\n  protected core!: Core;\n  private _enabled = true;\n\n  constructor(opts?: Partial<T>) {\n    this.opts = (opts ?? {}) as T;\n  }\n\n  /** Called by Core.registerPlugin() — gives plugin access to the core instance */\n  setCore(core: Core): void {\n    this.core = core;\n  }\n\n  /** Called after setCore(). Add event listeners and filters here. */\n  install(): void {}\n\n  /** Called by Core.deregisterPlugin() and Core.destroy(). Remove everything install() added. */\n  uninstall(): void {}\n\n  /** Re-enable after disable() */\n  enable(): void {\n    this._enabled = true;\n  }\n\n  /** Temporarily suspend plugin without uninstalling */\n  disable(): void {\n    this._enabled = false;\n  }\n\n  isEnabled(): boolean {\n    return this._enabled;\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface DependencyOptions {\n  /** Map of field name → space-separated list of dependent fields to revalidate */\n  [field: string]: string;\n}\n\nexport class Dependency extends Plugin<DependencyOptions> {\n  /** Fields currently being revalidated by this plugin — prevents infinite loops */\n  private revalidating = new Set<string>();\n\n  private onFieldValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { field } = payload as { field: string; result: string; elements: HTMLElement[] };\n\n    // If this field was triggered by a dependency chain, skip to prevent loops\n    if (this.revalidating.has(field)) return;\n\n    const depString = this.opts[field];\n    if (!depString) return;\n\n    const deps = depString\n      .split(\" \")\n      .map((s) => s.trim())\n      .filter(Boolean);\n\n    for (const dep of deps) {\n      if (this.revalidating.has(dep)) continue;\n      this.revalidating.add(dep);\n      this.core.resetField(dep);\n      void this.core.validateField(dep).finally(() => {\n        this.revalidating.delete(dep);\n      });\n    }\n  };\n\n  install(): void {\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.revalidating.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ValidatorInput } from \"../../core/types\";\n\nexport interface StartEndDateOptions {\n  /** Date format string. Supported tokens: YYYY, MM, DD. Separator: `-` or `/`. */\n  format: string;\n  startDate: {\n    /** Name of the start date field */\n    field: string;\n    /** Error message shown on the start date field when start > end */\n    message: string;\n  };\n  endDate: {\n    /** Name of the end date field */\n    field: string;\n    /** Error message shown on the end date field when end < start */\n    message: string;\n  };\n  [key: string]: unknown;\n}\n\n/** Parse a date string according to a format string. Returns NaN on failure. */\nfunction parseDate(value: string, format: string): number {\n  const sep = /[-/]/.exec(format)?.[0] ?? \"-\";\n  const fParts = format.split(sep);\n  const vParts = value.split(sep);\n  if (vParts.length !== 3) return NaN;\n  const yIdx = fParts.indexOf(\"YYYY\");\n  const mIdx = fParts.indexOf(\"MM\");\n  const dIdx = fParts.indexOf(\"DD\");\n  if (yIdx < 0 || mIdx < 0 || dIdx < 0) return NaN;\n  const y = parseInt(vParts[yIdx], 10);\n  const m = parseInt(vParts[mIdx], 10);\n  const d = parseInt(vParts[dIdx], 10);\n  const ts = Date.UTC(y, m - 1, d);\n  const dt = new Date(ts);\n  if (dt.getUTCFullYear() !== y || dt.getUTCMonth() !== m - 1 || dt.getUTCDate() !== d) return NaN;\n  return ts;\n}\n\nexport class StartEndDate extends Plugin<StartEndDateOptions> {\n  private readonly _id = Math.random().toString(36).slice(2, 8);\n\n  /** Validator key added to the start date field */\n  private get startKey(): string {\n    return `__startEndDate_s_${this._id}_${this.opts.startDate.field}`;\n  }\n  /** Validator key added to the end date field */\n  private get endKey(): string {\n    return `__startEndDate_e_${this._id}_${this.opts.endDate.field}`;\n  }\n\n  /** Prevent recursive cross-revalidation */\n  private revalidating = new Set<string>();\n\n  private onFieldValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { field } = payload as { field: string; result: string };\n    // If this field was triggered by a cross-revalidation from this plugin, stop here\n    if (this.revalidating.has(field)) return;\n\n    if (field === this.opts.startDate.field && !this.revalidating.has(this.opts.endDate.field)) {\n      this.revalidating.add(this.opts.endDate.field);\n      this.core.resetField(this.opts.endDate.field);\n      void this.core.validateField(this.opts.endDate.field).finally(() => {\n        this.revalidating.delete(this.opts.endDate.field);\n      });\n    } else if (field === this.opts.endDate.field && !this.revalidating.has(this.opts.startDate.field)) {\n      this.revalidating.add(this.opts.startDate.field);\n      this.core.resetField(this.opts.startDate.field);\n      void this.core.validateField(this.opts.startDate.field).finally(() => {\n        this.revalidating.delete(this.opts.startDate.field);\n      });\n    }\n  };\n\n  install(): void {\n    const { format, startDate, endDate } = this.opts;\n    const form = this.core.form;\n\n    // Register validator factories for cross-field comparison\n    this.core.registerValidator(this.startKey, () => ({\n      validate: (input: ValidatorInput) => {\n        const endEl = form.querySelector<HTMLInputElement>(`[name=\"${endDate.field}\"]`);\n        if (!endEl?.value) return { valid: true };\n        const start = parseDate(input.value, format);\n        const end = parseDate(endEl.value, format);\n        if (isNaN(start) || isNaN(end)) return { valid: true };\n        return { valid: start <= end };\n      },\n    }));\n\n    this.core.registerValidator(this.endKey, () => ({\n      validate: (input: ValidatorInput) => {\n        const startEl = form.querySelector<HTMLInputElement>(`[name=\"${startDate.field}\"]`);\n        if (!startEl?.value) return { valid: true };\n        const start = parseDate(startEl.value, format);\n        const end = parseDate(input.value, format);\n        if (isNaN(start) || isNaN(end)) return { valid: true };\n        return { valid: start <= end };\n      },\n    }));\n\n    // Merge cross-field validators into both fields\n    this.core.addField(startDate.field, {\n      validators: { [this.startKey]: { message: startDate.message } },\n    });\n    this.core.addField(endDate.field, {\n      validators: { [this.endKey]: { message: endDate.message } },\n    });\n\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.core.removeValidator(this.opts.startDate.field, this.startKey);\n    this.core.removeValidator(this.opts.endDate.field, this.endKey);\n    this.core.deregisterValidator(this.startKey);\n    this.core.deregisterValidator(this.endKey);\n    this.revalidating.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload, ValidationStatus } from \"../../core/types\";\n\nexport interface SequenceOptions {\n  enabled?: boolean;\n  [key: string]: unknown;\n}\n\nexport class Sequence extends Plugin<SequenceOptions> {\n  private previousResults = new Map<string, Record<string, ValidationStatus>>();\n\n  constructor(opts?: SequenceOptions) {\n    super({ enabled: true, ...opts });\n  }\n\n  private onValidatorValidated = (payload: unknown): void => {\n    const { field, validator, result } = payload as {\n      field: string;\n      validator: string;\n      result: { status: ValidationStatus };\n    };\n    if (!this.previousResults.has(field)) {\n      this.previousResults.set(field, {});\n    }\n    const pr = this.previousResults.get(field);\n    if (pr) pr[validator] = result.status;\n  };\n\n  private shouldValidate = (defaultValue: unknown, field: unknown, validator: unknown): boolean => {\n    if (!this.opts.enabled) return defaultValue as boolean;\n\n    const fieldName = field as string;\n    const validatorName = validator as string;\n    const fieldOpts = this.core.getFields()[fieldName];\n    if (!fieldOpts) return defaultValue as boolean;\n\n    const validatorNames = Object.keys(fieldOpts.validators);\n    const currentIndex = validatorNames.indexOf(validatorName);\n    if (currentIndex === 0) return defaultValue as boolean;\n\n    const prevRun = this.previousResults.get(fieldName) ?? {};\n    for (const prev of validatorNames.slice(0, currentIndex)) {\n      const opts = fieldOpts.validators[prev];\n      if (opts.enabled === false) continue;\n      if (prevRun[prev] === \"Invalid\") return false;\n    }\n\n    return defaultValue as boolean;\n  };\n\n  /** Post-validation filter: clear messages after the first failure (by definition order). */\n  private trimToFirstFailure = (payload: unknown): unknown => {\n    if (!this.opts.enabled) return payload;\n    const p = payload as ElementValidatedPayload;\n    if (p.valid) return payload;\n\n    const fieldOpts = this.core.getFields()[p.field];\n    if (!fieldOpts) return payload;\n\n    const orderedNames = Object.keys(fieldOpts.validators);\n    const firstFailedName = orderedNames.find(\n      (name) => p.validators[name] && !p.validators[name].valid,\n    );\n    if (!firstFailedName) return payload;\n\n    const trimmedValidators: ElementValidatedPayload[\"validators\"] = {};\n    for (const [name, result] of Object.entries(p.validators)) {\n      trimmedValidators[name] =\n        name === firstFailedName ? result : { ...result, message: \"\" };\n    }\n    return { ...p, validators: trimmedValidators };\n  };\n\n  install(): void {\n    this.core.on(\"core.validator.validated\", this.onValidatorValidated);\n    this.core.registerFilter(\"field-should-validate\", this.shouldValidate);\n    this.core.registerFilter(\"element-validated\", this.trimToFirstFailure);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.validator.validated\", this.onValidatorValidated);\n    this.core.deregisterFilter(\"field-should-validate\", this.shouldValidate);\n    this.core.deregisterFilter(\"element-validated\", this.trimToFirstFailure);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface TransformerOptions {\n  /**\n   * Map of field name → map of validator name → transform function.\n   * The function receives (field, element, validator) and returns the transformed string value.\n   */\n  [field: string]: {\n    [validator: string]: (\n      field: string,\n      element: HTMLElement,\n      validator: string,\n    ) => string;\n  };\n}\n\nexport class Transformer extends Plugin<TransformerOptions> {\n  private valueFilter = (\n    defaultValue: unknown,\n    field: unknown,\n    element: unknown,\n    validator: unknown,\n  ): unknown => {\n    if (!this.isEnabled()) return defaultValue;\n    const fn = this.opts[field as string]?.[validator as string];\n    if (typeof fn !== \"function\") return defaultValue;\n    return fn(field as string, element as HTMLElement, validator as string);\n  };\n\n  install(): void {\n    this.core.registerFilter(\"field-value\", this.valueFilter);\n  }\n\n  uninstall(): void {\n    this.core.deregisterFilter(\"field-value\", this.valueFilter);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload, ValidationStatus } from \"../../core/types\";\n\nexport interface AriaOptions {\n  [key: string]: unknown;\n}\n\nexport class Aria extends Plugin<AriaOptions> {\n  private readonly _id = Math.random().toString(36).slice(2, 8);\n  private containerIds = new Map<string, string>();\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n    element.setAttribute(\"aria-invalid\", valid ? \"false\" : \"true\");\n  };\n\n  private onFieldValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { field, result, elements } = payload as {\n      field: string;\n      result: ValidationStatus;\n      elements: HTMLElement[];\n    };\n\n    if (result === \"Invalid\") {\n      let container: HTMLElement | null = null;\n      for (const el of elements) {\n        const sibling = el.nextElementSibling as HTMLElement | null;\n        if (sibling?.classList.contains(\"vd-plugins-message-container\")) {\n          container = sibling;\n          break;\n        }\n      }\n\n      if (container) {\n        if (!this.containerIds.has(field)) {\n          this.containerIds.set(field, `fv-aria-${this._id}-${field}-messages`);\n        }\n        const id = this.containerIds.get(field)!;\n        container.id = id;\n        container.setAttribute(\"role\", \"alert\");\n        for (const el of elements) {\n          el.setAttribute(\"aria-describedby\", id);\n        }\n      }\n    } else {\n      // Find and clean up the message container if it exists\n      let container: HTMLElement | null = null;\n      for (const el of elements) {\n        const sibling = el.nextElementSibling as HTMLElement | null;\n        if (sibling?.classList.contains(\"vd-plugins-message-container\")) {\n          container = sibling;\n          break;\n        }\n      }\n      if (container) {\n        container.removeAttribute(\"id\");\n        container.removeAttribute(\"role\");\n      }\n      this.containerIds.delete(field);\n      for (const el of elements) {\n        el.removeAttribute(\"aria-describedby\");\n      }\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { field, elements } = payload as { field: string; elements: HTMLElement[] };\n    this.containerIds.delete(field);\n    for (const el of elements) {\n      el.removeAttribute(\"aria-invalid\");\n      el.removeAttribute(\"aria-describedby\");\n    }\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    this.containerIds.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ValidationStatus } from \"../../core/types\";\n\nexport interface AutoFocusOptions {\n  /** Called before focusing the first invalid element. */\n  onPrefocus?: (payload: { field: string; element: HTMLElement }) => void;\n  [key: string]: unknown;\n}\n\nexport class AutoFocus extends Plugin<AutoFocusOptions> {\n  private fieldStatuses = new Map<string, ValidationStatus>();\n\n  constructor(opts?: Partial<AutoFocusOptions>) {\n    super(opts);\n    if (opts?.enabled === false) {\n      this.disable();\n    }\n  }\n\n  private onFieldValidated = (payload: unknown): void => {\n    const { field, result } = payload as { field: string; result: ValidationStatus };\n    this.fieldStatuses.set(field, result);\n  };\n\n  private onFormInvalid = (): void => {\n    if (!this.isEnabled()) return;\n\n    const fields = this.core.getFields();\n    for (const field of Object.keys(fields)) {\n      if (this.fieldStatuses.get(field) === \"Invalid\") {\n        const elements = this.core.getElements(field);\n        const firstElement = elements[0];\n        if (!firstElement) continue;\n\n        if (this.opts.onPrefocus) {\n          this.opts.onPrefocus({ field, element: firstElement });\n        }\n\n        firstElement.focus();\n        return;\n      }\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.fieldStatuses.delete(field);\n  };\n\n  private onFormValidating = (): void => {\n    this.fieldStatuses.clear();\n  };\n\n  private onFormReset = (): void => {\n    this.fieldStatuses.clear();\n  };\n\n  install(): void {\n    this.core.on(\"core.form.validating\", this.onFormValidating);\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n    this.core.on(\"core.form.invalid\", this.onFormInvalid);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n    this.core.on(\"core.form.reset\", this.onFormReset);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.form.validating\", this.onFormValidating);\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.core.off(\"core.form.invalid\", this.onFormInvalid);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    this.core.off(\"core.form.reset\", this.onFormReset);\n    this.fieldStatuses.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport type TooltipPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\nexport type TooltipTrigger = \"hover\" | \"click\";\n\nexport interface TooltipOptions {\n  /** Where the tooltip appears relative to the field element. Default: 'top' */\n  placement?: TooltipPlacement;\n  /** What triggers the tooltip. Default: 'hover' */\n  trigger?: TooltipTrigger;\n  [key: string]: unknown;\n}\n\nexport class Tooltip extends Plugin<TooltipOptions> {\n  private tip: HTMLElement | null = null;\n  private messages = new Map<HTMLElement, string>();\n  private currentElement: HTMLElement | null = null;\n  private triggerListeners = new Map<\n    HTMLElement,\n    { show: (e: MouseEvent) => void; hide?: () => void }\n  >();\n\n  constructor(opts?: TooltipOptions) {\n    super({ placement: \"top\", trigger: \"hover\", ...opts });\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid, validators } = payload as ElementValidatedPayload;\n\n    if (!valid) {\n      const firstFailing = Object.values(validators).find((r) => !r.valid && r.message);\n      if (firstFailing) {\n        this.messages.set(element, firstFailing.message);\n        this.attachTrigger(element);\n      }\n    } else {\n      if (this.currentElement === element) {\n        this.hideTip();\n      }\n      this.messages.delete(element);\n      this.detachTrigger(element);\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    for (const el of elements) {\n      if (this.currentElement === el) this.hideTip();\n      this.messages.delete(el);\n      this.detachTrigger(el);\n    }\n  };\n\n  private onDocumentClicked = (): void => {\n    this.hideTip();\n  };\n\n  private attachTrigger(element: HTMLElement): void {\n    if (this.triggerListeners.has(element)) return;\n    const trigger = this.opts.trigger ?? \"hover\";\n\n    if (trigger === \"hover\") {\n      const show = () => this.showTip(element);\n      const hide = () => this.hideTip();\n      element.addEventListener(\"mouseenter\", show);\n      element.addEventListener(\"mouseleave\", hide);\n      this.triggerListeners.set(element, { show, hide });\n    } else {\n      const show = (e: MouseEvent) => {\n        e.stopPropagation();\n        this.showTip(element);\n      };\n      element.addEventListener(\"click\", show);\n      this.triggerListeners.set(element, { show });\n    }\n  }\n\n  private detachTrigger(element: HTMLElement): void {\n    const listeners = this.triggerListeners.get(element);\n    if (!listeners) return;\n    const trigger = this.opts.trigger ?? \"hover\";\n    if (trigger === \"hover\") {\n      element.removeEventListener(\"mouseenter\", listeners.show);\n      if (listeners.hide) element.removeEventListener(\"mouseleave\", listeners.hide);\n    } else {\n      element.removeEventListener(\"click\", listeners.show);\n    }\n    this.triggerListeners.delete(element);\n  }\n\n  private showTip(element: HTMLElement): void {\n    const message = this.messages.get(element);\n    if (!message || !this.tip) return;\n\n    this.currentElement = element;\n    this.tip.textContent = message;\n    this.tip.classList.add(\"vd-plugins-tooltip--show\");\n\n    const rect = element.getBoundingClientRect();\n    const tipRect = this.tip.getBoundingClientRect();\n    const scrollTop = window.scrollY ?? 0;\n    const scrollLeft = window.scrollX ?? 0;\n    const placement = this.opts.placement ?? \"top\";\n\n    let top = 0;\n    let left = 0;\n    switch (placement) {\n      case \"bottom\":\n        top = rect.bottom + scrollTop;\n        left = rect.left + rect.width / 2 - tipRect.width / 2 + scrollLeft;\n        break;\n      case \"left\":\n        top = rect.top + rect.height / 2 - tipRect.height / 2 + scrollTop;\n        left = rect.left - tipRect.width + scrollLeft;\n        break;\n      case \"right\":\n        top = rect.top + rect.height / 2 - tipRect.height / 2 + scrollTop;\n        left = rect.right + scrollLeft;\n        break;\n      case \"top\":\n      default:\n        top = rect.top - tipRect.height + scrollTop;\n        left = rect.left + rect.width / 2 - tipRect.width / 2 + scrollLeft;\n        break;\n    }\n    this.tip.style.top = `${top}px`;\n    this.tip.style.left = `${left}px`;\n  }\n\n  private hideTip(): void {\n    this.currentElement = null;\n    if (!this.tip) return;\n    this.tip.classList.remove(\"vd-plugins-tooltip--show\");\n    this.tip.textContent = \"\";\n  }\n\n  install(): void {\n    this.tip = document.createElement(\"div\");\n    this.tip.className = `vd-plugins-tooltip vd-plugins-tooltip--${this.opts.placement ?? \"top\"}`;\n    document.body.appendChild(this.tip);\n\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n\n    if ((this.opts.trigger ?? \"hover\") === \"click\") {\n      document.addEventListener(\"click\", this.onDocumentClicked);\n    }\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n\n    if ((this.opts.trigger ?? \"hover\") === \"click\") {\n      document.removeEventListener(\"click\", this.onDocumentClicked);\n    }\n\n    for (const element of [...this.triggerListeners.keys()]) {\n      this.detachTrigger(element);\n    }\n\n    this.messages.clear();\n    this.currentElement = null;\n    if (this.tip) this.tip.parentNode?.removeChild(this.tip);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface DefaultSubmitOptions {\n  [key: string]: unknown;\n}\n\nexport class DefaultSubmit extends Plugin<DefaultSubmitOptions> {\n  constructor(opts?: DefaultSubmitOptions) {\n    super(opts);\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private onFormValid = (): void => {\n    if (!this.isEnabled()) return;\n    this.core.form.submit();\n  };\n\n  install(): void {\n    if (this.core.form.querySelectorAll('[name=\"submit\"]').length > 0) {\n      throw new Error(\n        'DefaultSubmit: do not use \"submit\" as the name of a submit button — it shadows form.submit()',\n      );\n    }\n    this.core.on(\"core.form.valid\", this.onFormValid);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.form.valid\", this.onFormValid);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ValidationStatus } from \"../../core/types\";\n\nexport type FieldValidationStatus = ValidationStatus | \"Validating\";\n\nexport interface FieldStatusOptions {\n  onStatusChanged?: (areFieldsValid: boolean) => void;\n  [key: string]: unknown;\n}\n\nexport class FieldStatus extends Plugin<FieldStatusOptions> {\n  private statuses = new Map<string, FieldValidationStatus>();\n\n  constructor(opts?: FieldStatusOptions) {\n    super(opts);\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private onFieldAdded = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.statuses.set(field, \"NotValidated\");\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.statuses.delete(field);\n    this.notifyStatusChanged();\n  };\n\n  private onFieldValidating = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.statuses.set(field, \"Validating\");\n    this.notifyStatusChanged();\n  };\n\n  private onFieldValidated = (payload: unknown): void => {\n    const { field, result } = payload as { field: string; result: ValidationStatus };\n    this.statuses.set(field, result);\n    this.notifyStatusChanged();\n  };\n\n  private onFormReset = (): void => {\n    for (const field of this.statuses.keys()) {\n      this.statuses.set(field, \"NotValidated\");\n    }\n    this.notifyStatusChanged();\n  };\n\n  private notifyStatusChanged(): void {\n    if (!this.isEnabled()) return;\n    this.opts.onStatusChanged?.(this.areFieldsValid());\n  }\n\n  areFieldsValid(): boolean {\n    return Array.from(this.statuses.values()).every(\n      (s) => s === \"Valid\" || s === \"NotValidated\",\n    );\n  }\n\n  getStatuses(): Map<string, FieldValidationStatus> {\n    return this.isEnabled() ? this.statuses : new Map();\n  }\n\n  install(): void {\n    // Seed statuses for fields that were added before this plugin was installed\n    for (const field of Object.keys(this.core.getFields())) {\n      this.statuses.set(field, \"NotValidated\");\n    }\n    this.core.on(\"core.field.added\", this.onFieldAdded);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n    this.core.on(\"core.field.validating\", this.onFieldValidating);\n    this.core.on(\"core.field.validated\", this.onFieldValidated);\n    this.core.on(\"core.form.reset\", this.onFormReset);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.added\", this.onFieldAdded);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    this.core.off(\"core.field.validating\", this.onFieldValidating);\n    this.core.off(\"core.field.validated\", this.onFieldValidated);\n    this.core.off(\"core.form.reset\", this.onFormReset);\n    this.statuses.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { FieldOptions, ValidatorOptions } from \"../../core/types\";\n\nexport interface DeclarativeOptions {\n  /** Attribute prefix for validators. Default: \"data-vd-\" */\n  prefix?: string;\n  /** Map HTML5 attributes (required, type, minlength, etc.) to validators. Default: false */\n  html5Input?: boolean;\n  [key: string]: unknown;\n}\n\nexport class Declarative extends Plugin<DeclarativeOptions> {\n  /** Fields whose declarative attrs have already been processed — prevents infinite loops */\n  private addedFields = new Set<string>();\n\n  constructor(opts?: DeclarativeOptions) {\n    super({ prefix: \"data-vd-\", html5Input: false, ...opts });\n    if (opts?.enabled === false) this.disable();\n  }\n\n  install(): void {\n    const existingFields = this.core.getFields();\n    const parsed = this.parseAllElements();\n\n    for (const [field, { validators, selector }] of Object.entries(parsed)) {\n      // Normalize: any validator with no explicit `enabled` defaults to false\n      for (const v of Object.keys(validators)) {\n        if (validators[v].enabled === undefined) {\n          validators[v].enabled = false;\n        }\n      }\n\n      const existing = existingFields[field];\n      if (existing) {\n        // Field already defined programmatically — only add validators NOT already there\n        const extra: Record<string, ValidatorOptions> = {};\n        for (const [v, vopts] of Object.entries(validators)) {\n          if (!existing.validators[v]) extra[v] = vopts;\n        }\n        if (Object.keys(extra).length > 0) {\n          this.addedFields.add(field);\n          this.core.addField(field, { validators: extra });\n        }\n      } else {\n        // Purely declarative field — add it fresh\n        this.addedFields.add(field);\n        const fieldOpts: FieldOptions = { validators };\n        if (selector) fieldOpts.selector = selector;\n        this.core.addField(field, fieldOpts);\n      }\n    }\n\n    this.core.on(\"core.field.added\", this.onFieldAdded);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  uninstall(): void {\n    this.addedFields.clear();\n    this.core.off(\"core.field.added\", this.onFieldAdded);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  private onFieldAdded = (payload: unknown): void => {\n    const { field, elements, options } = payload as {\n      field: string;\n      elements: HTMLElement[];\n      options: FieldOptions;\n    };\n    if (!elements || elements.length === 0 || this.addedFields.has(field)) return;\n    this.addedFields.add(field);\n\n    const allDeclarative: Record<string, ValidatorOptions> = {};\n    for (const el of elements) {\n      const { validators } = this.parseElement(el);\n      Object.assign(allDeclarative, validators);\n    }\n    if (Object.keys(allDeclarative).length === 0) return;\n\n    // Normalize enabled flag\n    for (const v of Object.keys(allDeclarative)) {\n      if (allDeclarative[v].enabled === undefined) allDeclarative[v].enabled = false;\n    }\n\n    // Only add validators not already in the programmatic config\n    const extra: Record<string, ValidatorOptions> = {};\n    for (const [v, vopts] of Object.entries(allDeclarative)) {\n      if (!options.validators?.[v]) extra[v] = vopts;\n    }\n    if (Object.keys(extra).length > 0) {\n      this.core.addField(field, { validators: extra });\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { field } = payload as { field: string };\n    this.addedFields.delete(field);\n  };\n\n  /** Scan form for all elements with [name] or [prefix+field], parse each one. */\n  private parseAllElements(): Record<string, { validators: Record<string, ValidatorOptions>; selector?: string }> {\n    const prefix = this.opts.prefix as string;\n    const result: Record<string, { validators: Record<string, ValidatorOptions>; selector?: string }> = {};\n    const elements = Array.from(\n      this.core.form.querySelectorAll<HTMLElement>(`[name], [${prefix}field]`),\n    );\n    for (const el of elements) {\n      const { validators } = this.parseElement(el);\n      if (Object.keys(validators).length === 0) continue;\n      const name = el.getAttribute(\"name\");\n      const fvField = el.getAttribute(`${prefix}field`);\n      const field = name ?? fvField ?? \"\";\n      if (!field) continue;\n      // If element has no name attribute, we need a custom selector to find it\n      const selector = !name && fvField ? `[${prefix}field=\"${fvField}\"]` : undefined;\n      if (result[field]) {\n        result[field].validators = { ...result[field].validators, ...validators };\n      } else {\n        result[field] = { validators: { ...validators }, selector };\n      }\n    }\n    return result;\n  }\n\n  /** Parse data-vd-* attributes (and html5 attrs if enabled) from a single element. */\n  parseElement(el: HTMLElement): { validators: Record<string, ValidatorOptions> } {\n    const prefix = this.opts.prefix as string;\n    const html5Input = this.opts.html5Input as boolean;\n    // Escape any regex metacharacters in the prefix (e.g. the hyphens in \"data-vd-\")\n    const escapedPrefix = prefix.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n    const reg = new RegExp(`^${escapedPrefix}([a-z0-9-]+)(___)?([a-z0-9-]+)?$`);\n    const opts: Record<string, Record<string, unknown>> = {};\n    const type = el.getAttribute(\"type\");\n\n    // ── HTML5 attribute mappings ────────────────────────────────────────────\n    if (html5Input) {\n      if (el.hasAttribute(\"required\")) {\n        opts.notEmpty = { ...opts.notEmpty, enabled: true };\n      }\n      if (type === \"email\") {\n        opts.email = { ...opts.email, enabled: true };\n      }\n      if (type === \"url\") {\n        opts.uri = { ...opts.uri, enabled: true };\n      }\n      if (type === \"range\") {\n        const min = el.getAttribute(\"min\");\n        const max = el.getAttribute(\"max\");\n        opts.between = {\n          ...opts.between,\n          enabled: true,\n          ...(min !== null ? { min: parseFloat(min) } : {}),\n          ...(max !== null ? { max: parseFloat(max) } : {}),\n        };\n      }\n      const minlength = el.getAttribute(\"minlength\");\n      if (minlength !== null) {\n        opts.stringLength = { ...opts.stringLength, enabled: true, min: parseInt(minlength, 10) };\n      }\n      const maxlength = el.getAttribute(\"maxlength\");\n      if (maxlength !== null) {\n        opts.stringLength = { ...opts.stringLength, enabled: true, max: parseInt(maxlength, 10) };\n      }\n      const pattern = el.getAttribute(\"pattern\");\n      if (pattern !== null) {\n        opts.regexp = { ...opts.regexp, enabled: true, regexp: pattern };\n      }\n      const minVal = el.getAttribute(\"min\");\n      if (minVal !== null && type !== \"date\" && type !== \"range\") {\n        opts.greaterThan = { ...opts.greaterThan, enabled: true, min: parseFloat(minVal) };\n      }\n      const maxVal = el.getAttribute(\"max\");\n      if (maxVal !== null && type !== \"date\" && type !== \"range\") {\n        opts.lessThan = { ...opts.lessThan, enabled: true, max: parseFloat(maxVal) };\n      }\n    }\n\n    // ── data-vd-* attribute parsing ─────────────────────────────────────────\n    for (const attr of Array.from(el.attributes)) {\n      const match = reg.exec(attr.name);\n      if (!match) continue;\n      const validatorName = this.toCamelCase(match[1]);\n      // Skip data-vd-field — it names the field, it's not a validator\n      if (validatorName === \"field\") continue;\n      const optionName = match[3] ? this.toCamelCase(match[3]) : null;\n      if (!opts[validatorName]) opts[validatorName] = {};\n      if (optionName) {\n        opts[validatorName][optionName] = this.normalizeValue(attr.value);\n      } else {\n        // Base attribute: data-vd-{validator} — sets enabled flag\n        if (opts[validatorName].enabled !== true) {\n          opts[validatorName].enabled = attr.value === \"\" || attr.value === \"true\";\n        }\n      }\n    }\n\n    return { validators: opts as Record<string, ValidatorOptions> };\n  }\n\n  /** Coerce attribute string values to their natural types. */\n  private normalizeValue(value: string): boolean | number | string {\n    if (value === \"true\" || value === \"\") return true;\n    if (value === \"false\") return false;\n    const num = Number(value);\n    if (!isNaN(num) && value.trim() !== \"\") return num;\n    return value;\n  }\n\n  private toCamelCase(input: string): string {\n    return input.replace(/-([a-z])/g, (_, char: string) => char.toUpperCase());\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface CharCounterOptions {\n  enabled?: boolean;\n  /** CSS selector for the counter container. Defaults to \".vd-plugins-char-counter\" within the field's parent. */\n  container?: string;\n  /** Function to format the counter text. Defaults to \"current / max\". */\n  renderCount?: (current: number, max: number) => string;\n  /** CSS class added to the container when the character count exceeds max. */\n  exceededClass?: string;\n  /** Only apply the counter to these field names. Defaults to all fields with a stringLength max. */\n  fields?: string[];\n  [key: string]: unknown;\n}\n\ninterface CounterState {\n  container: HTMLElement;\n  max: number;\n  listener: EventListener;\n}\n\nexport class CharCounter extends Plugin<CharCounterOptions> {\n  private counters = new Map<HTMLElement, CounterState>();\n\n  constructor(opts?: CharCounterOptions) {\n    super(opts);\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private renderCount(current: number, max: number): string {\n    return this.opts.renderCount ? this.opts.renderCount(current, max) : `${current} / ${max}`;\n  }\n\n  private getMax(field: string): number | null {\n    const validators = this.core.getFields()[field]?.validators ?? {};\n    const sl = validators.stringLength as { max?: number } | undefined;\n    return sl?.max ?? null;\n  }\n\n  private shouldTrack(field: string): boolean {\n    if (this.opts.fields && !this.opts.fields.includes(field)) return false;\n    return this.getMax(field) !== null;\n  }\n\n  private attachToField(field: string, elements: HTMLElement[]): void {\n    if (!this.shouldTrack(field)) return;\n    const max = this.getMax(field)!;\n\n    for (const el of elements) {\n      // Find the counter container\n      const containerSelector = this.opts.container ?? \".vd-plugins-char-counter\";\n      const container = (el.closest(\"div, fieldset, li\") ?? el.parentNode)?.querySelector<HTMLElement>(\n        containerSelector,\n      );\n      if (!container) continue;\n\n      // Set initial count\n      const input = el as HTMLInputElement;\n      container.textContent = this.renderCount(input.value?.length ?? 0, max);\n\n      const listener: EventListener = () => {\n        if (!this.isEnabled()) return;\n        const current = (el as HTMLInputElement).value?.length ?? 0;\n        container.textContent = this.renderCount(current, max);\n        const exceededClass = this.opts.exceededClass ?? \"vd-plugins-char-counter--exceeded\";\n        if (current > max) {\n          container.classList.add(exceededClass);\n        } else {\n          container.classList.remove(exceededClass);\n        }\n      };\n\n      el.addEventListener(\"input\", listener);\n      this.counters.set(el, { container, max, listener });\n    }\n  }\n\n  private detachFromField(elements: HTMLElement[]): void {\n    for (const el of elements) {\n      const state = this.counters.get(el);\n      if (state) {\n        el.removeEventListener(\"input\", state.listener);\n        state.container.textContent = \"\";\n        this.counters.delete(el);\n      }\n    }\n  }\n\n  private onFieldAdded = (payload: unknown): void => {\n    const { field, elements } = payload as { field: string; elements: HTMLElement[] };\n    this.attachToField(field, elements);\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    this.detachFromField(elements);\n  };\n\n  install(): void {\n    this.core.on(\"core.field.added\", this.onFieldAdded);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n\n    // Seed fields already registered before install\n    for (const [field, elements] of Object.entries(this.core.getFields()).map(([f]) => [\n      f,\n      this.core.getElements(f),\n    ] as [string, HTMLElement[]])) {\n      this.attachToField(field, elements);\n    }\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.added\", this.onFieldAdded);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    for (const [el, state] of this.counters) {\n      el.removeEventListener(\"input\", state.listener);\n      state.container.textContent = \"\";\n    }\n    this.counters.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface SummaryOptions {\n  enabled?: boolean;\n  /** CSS selector for the summary container element. Default: \".vd-plugins-summary\" */\n  container?: string;\n  /** Renders the title line. Return empty string to omit. */\n  renderTitle?: () => string;\n  /** Renders a single error item. Receives field name and message. */\n  renderItem?: (field: string, message: string) => string;\n  /** Scroll the container into view after rendering. Default: false */\n  autoScroll?: boolean;\n  [key: string]: unknown;\n}\n\nexport class Summary extends Plugin<SummaryOptions> {\n  /** Last known error messages: field → message[] */\n  private messages = new Map<string, string[]>();\n\n  constructor(opts?: SummaryOptions) {\n    super(opts);\n    if (opts?.enabled === false) this.disable();\n  }\n\n  private getContainer(): HTMLElement | null {\n    const selector = this.opts.container ?? \".vd-plugins-summary\";\n    return document.querySelector<HTMLElement>(selector);\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    const { field, validators } = payload as ElementValidatedPayload;\n    const errors = Object.values(validators)\n      .filter((r) => !r.valid && r.message)\n      .map((r) => r.message);\n    if (errors.length > 0) {\n      this.messages.set(field, errors);\n    } else {\n      this.messages.delete(field);\n    }\n  };\n\n  private onFormInvalid = (): void => {\n    if (!this.isEnabled()) return;\n    const container = this.getContainer();\n    if (!container) return;\n\n    const renderItem = this.opts.renderItem ?? ((_field, msg) => msg);\n    const renderTitle =\n      this.opts.renderTitle ?? (() => \"Please fix the following errors:\");\n\n    const allErrors: Array<{ field: string; message: string }> = [];\n    for (const [field, msgs] of this.messages) {\n      for (const msg of msgs) {\n        allErrors.push({ field, message: msg });\n      }\n    }\n\n    if (allErrors.length === 0) {\n      container.innerHTML = \"\";\n      return;\n    }\n\n    const title = renderTitle();\n    const items = allErrors\n      .map(({ field, message }) => `<li>${renderItem(field, message)}</li>`)\n      .join(\"\");\n\n    container.innerHTML = `${title ? `<p>${title}</p>` : \"\"}<ul>${items}</ul>`;\n\n    if (this.opts.autoScroll) {\n      container.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n    }\n  };\n\n  private onFormClear = (): void => {\n    this.messages.clear();\n    const container = this.getContainer();\n    if (container) container.innerHTML = \"\";\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.form.invalid\", this.onFormInvalid);\n    this.core.on(\"core.form.valid\", this.onFormClear);\n    this.core.on(\"core.form.reset\", this.onFormClear);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.form.invalid\", this.onFormInvalid);\n    this.core.off(\"core.form.valid\", this.onFormClear);\n    this.core.off(\"core.form.reset\", this.onFormClear);\n    this.onFormClear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ValidatorFactory, ValidatorInput } from \"../../core/types\";\n\nexport interface PasswordStrengthOptions {\n  /** The field name to evaluate password strength for */\n  field: string;\n  /** Error message when score is below minScore. Default: 'The password is not strong enough' */\n  message?: string;\n  /** Minimum required score (0–4). Default: 3 */\n  minScore?: number;\n  /** Called after each evaluation */\n  onScore?: (payload: { field: string; score: number; valid: boolean }) => void;\n  [key: string]: unknown;\n}\n\nfunction scorePassword(password: string): number {\n  if (!password) return 0;\n  let score = 0;\n  if (password.length >= 8) score++;\n  if (/[A-Z]/.test(password)) score++;\n  if (/[0-9]/.test(password)) score++;\n  if (/[^A-Za-z0-9]/.test(password)) score++;\n  return score;\n}\n\nexport class PasswordStrength extends Plugin<PasswordStrengthOptions> {\n  private readonly _id = Math.random().toString(36).slice(2, 8);\n  private get validatorName(): string {\n    return `__pwStr_${this._id}`;\n  }\n\n  private buildFactory(): ValidatorFactory {\n    const field = this.opts.field;\n    const minScore = this.opts.minScore ?? 3;\n    const message = this.opts.message ?? \"The password is not strong enough\";\n    const onScore = this.opts.onScore;\n\n    return () => ({\n      validate(input: ValidatorInput) {\n        const score = scorePassword(input.value);\n        const valid = score >= minScore;\n        if (onScore) {\n          onScore({ field, score, valid });\n        }\n        return { valid, message: valid ? \"\" : message };\n      },\n    });\n  }\n\n  install(): void {\n    this.core.registerValidator(this.validatorName, this.buildFactory());\n    this.core.addField(this.opts.field, {\n      validators: {\n        [this.validatorName]: {},\n      },\n    });\n  }\n\n  uninstall(): void {\n    this.core.removeValidator(this.opts.field, this.validatorName);\n    this.core.deregisterValidator(this.validatorName);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\ntype ExcludedFn = (field: string, element: HTMLElement) => boolean;\n\nexport interface ExcludedOptions {\n  excluded?: string | ExcludedFn;\n  [key: string]: unknown;\n}\n\nexport class Excluded extends Plugin<ExcludedOptions> {\n  private isExcluded = (\n    defaultValue: unknown,\n    field: unknown,\n    _validator: unknown,\n    element: unknown,\n  ): boolean => {\n    if (!this.isEnabled()) return defaultValue as boolean;\n    const el = element as HTMLElement;\n    const fieldName = field as string;\n    const { excluded } = this.opts;\n\n    // Default: exclude disabled and hidden inputs\n    const input = el as HTMLInputElement;\n    if (input.disabled || input.type === \"hidden\") return false;\n\n    if (!excluded) return defaultValue as boolean;\n\n    if (typeof excluded === \"function\") {\n      return excluded(fieldName, el) ? false : (defaultValue as boolean);\n    }\n\n    if (typeof excluded === \"string\") {\n      return el.matches(excluded) ? false : (defaultValue as boolean);\n    }\n\n    return defaultValue as boolean;\n  };\n\n  install(): void {\n    this.core.registerFilter(\"field-should-validate\", this.isExcluded);\n  }\n\n  uninstall(): void {\n    this.core.deregisterFilter(\"field-should-validate\", this.isExcluded);\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface TriggerOptions {\n  /** DOM event name or map of field→event. Use false to disable for a field. */\n  event?: string | Record<string, string | false>;\n  /** Debounce delay in milliseconds */\n  delay?: number;\n  [key: string]: unknown;\n}\n\ninterface Handler {\n  element: HTMLElement;\n  event: string;\n  listener: EventListener;\n}\n\nexport class Trigger extends Plugin<TriggerOptions> {\n  private handlers: Handler[] = [];\n  private timers = new Map<string, ReturnType<typeof setTimeout>>();\n\n  constructor(opts?: TriggerOptions) {\n    super({ event: \"input\", delay: 0, ...opts });\n  }\n\n  private onFieldAdded = (payload: unknown): void => {\n    const { field, elements } = payload as { field: string; elements: HTMLElement[] };\n    this.attachToElements(field, elements);\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    this.detachFromElements(elements);\n  };\n\n  private getEventForField(field: string): string | false {\n    const { event } = this.opts;\n    if (!event) return \"input\";\n    if (typeof event === \"string\") return event;\n    return event[field] ?? \"input\";\n  }\n\n  private attachToElements(field: string, elements: HTMLElement[]): void {\n    const eventName = this.getEventForField(field);\n    if (eventName === false) return;\n\n    for (const el of elements) {\n      const listener: EventListener = () => {\n        if (!this.isEnabled()) return;\n        const delay = this.opts.delay ?? 0;\n        if (delay > 0) {\n          clearTimeout(this.timers.get(field));\n          this.timers.set(\n            field,\n            setTimeout(() => {\n              this.core.resetField(field);\n              this.core.validateField(field);\n            }, delay),\n          );\n        } else {\n          this.core.resetField(field);\n          void this.core.validateField(field);\n        }\n      };\n      el.addEventListener(eventName, listener);\n      this.handlers.push({ element: el, event: eventName, listener });\n    }\n  }\n\n  private detachFromElements(elements: HTMLElement[]): void {\n    this.handlers = this.handlers.filter(({ element, event, listener }) => {\n      if (elements.includes(element)) {\n        element.removeEventListener(event, listener);\n        return false;\n      }\n      return true;\n    });\n  }\n\n  install(): void {\n    this.core.on(\"core.field.added\", this.onFieldAdded);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n\n    // Attach to fields already present when the plugin is registered\n    for (const field of Object.keys(this.core.getFields())) {\n      this.attachToElements(field, this.core.getElements(field));\n    }\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.field.added\", this.onFieldAdded);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    for (const { element, event, listener } of this.handlers) {\n      element.removeEventListener(event, listener);\n    }\n    this.handlers = [];\n    for (const timer of this.timers.values()) clearTimeout(timer);\n    this.timers.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface MessageOptions {\n  /** CSS selector for a custom message container. If omitted, a div is inserted after the field. */\n  container?: string;\n  /** CSS class added to the message container element */\n  clazz?: string;\n  /** When true, only the first error message is shown per field. Default: false. */\n  first?: boolean;\n  [key: string]: unknown;\n}\n\nexport class Message extends Plugin<MessageOptions> {\n  /** Map from field element → message container element */\n  private containers = new Map<HTMLElement, HTMLElement>();\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid, validators } = payload as ElementValidatedPayload;\n\n    let container = this.containers.get(element);\n    if (!container) {\n      container = document.createElement(\"div\");\n      container.className = this.opts.clazz ?? \"vd-plugins-message-container\";\n\n      const customContainer = this.opts.container\n        ? document.querySelector(this.opts.container)\n        : null;\n\n      if (customContainer) {\n        customContainer.appendChild(container);\n      } else {\n        element.parentNode?.insertBefore(container, element.nextSibling);\n      }\n      this.containers.set(element, container);\n    }\n\n    container.innerHTML = \"\";\n    if (!valid) {\n      const failing = Object.values(validators).filter((r) => !r.valid && r.message);\n      const toRender = this.opts.first ? failing.slice(0, 1) : failing;\n      for (const result of toRender) {\n        const msg = document.createElement(\"div\");\n        msg.className = \"vd-plugins-message\";\n        msg.textContent = result.message;\n        container.appendChild(msg);\n      }\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    for (const el of elements) {\n      const container = this.containers.get(el);\n      if (container) {\n        container.parentNode?.removeChild(container);\n        this.containers.delete(el);\n      }\n    }\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    for (const container of this.containers.values()) {\n      container.parentNode?.removeChild(container);\n    }\n    this.containers.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface IconOptions {\n  valid?: string;\n  invalid?: string;\n  validating?: string;\n  [key: string]: unknown;\n}\n\nexport class Icon extends Plugin<IconOptions> {\n  private icons = new Map<HTMLElement, HTMLElement>();\n\n  constructor(opts?: IconOptions) {\n    super({ valid: \"✓\", invalid: \"✗\", validating: \"…\", ...opts });\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n\n    let icon = this.icons.get(element);\n    if (!icon) {\n      icon = document.createElement(\"span\");\n      icon.className = \"vd-plugins-icon\";\n      element.parentNode?.insertBefore(icon, element.nextSibling);\n      this.icons.set(element, icon);\n    }\n\n    icon.classList.remove(\"vd-plugins-icon--valid\", \"vd-plugins-icon--invalid\");\n    if (valid) {\n      icon.classList.add(\"vd-plugins-icon--valid\");\n      icon.textContent = this.opts.valid ?? \"✓\";\n    } else {\n      icon.classList.add(\"vd-plugins-icon--invalid\");\n      icon.textContent = this.opts.invalid ?? \"✗\";\n    }\n  };\n\n  private onFieldRemoved = (payload: unknown): void => {\n    const { elements } = payload as { elements: HTMLElement[] };\n    for (const el of elements) {\n      const icon = this.icons.get(el);\n      if (icon) {\n        icon.parentNode?.removeChild(icon);\n        this.icons.delete(el);\n      }\n    }\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n    this.core.on(\"core.field.removed\", this.onFieldRemoved);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    this.core.off(\"core.field.removed\", this.onFieldRemoved);\n    for (const icon of this.icons.values()) {\n      icon.parentNode?.removeChild(icon);\n    }\n    this.icons.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\n\nexport interface SubmitButtonOptions {\n  /** CSS selector for submit button(s). Defaults to [type=\"submit\"]. */\n  selector?: string;\n  [key: string]: unknown;\n}\n\nexport class SubmitButton extends Plugin<SubmitButtonOptions> {\n  constructor(opts?: SubmitButtonOptions) {\n    super({ selector: '[type=\"submit\"]', ...opts });\n  }\n\n  private getButtons(): HTMLButtonElement[] {\n    const selector = this.opts.selector ?? '[type=\"submit\"]';\n    return Array.from(this.core.form.querySelectorAll<HTMLButtonElement>(selector));\n  }\n\n  private onValidating = (): void => {\n    if (!this.isEnabled()) return;\n    for (const btn of this.getButtons()) btn.disabled = true;\n  };\n\n  private onDone = (): void => {\n    if (!this.isEnabled()) return;\n    for (const btn of this.getButtons()) btn.disabled = false;\n  };\n\n  install(): void {\n    this.core.on(\"core.form.validating\", this.onValidating);\n    this.core.on(\"core.form.valid\", this.onDone);\n    this.core.on(\"core.form.invalid\", this.onDone);\n    this.core.on(\"core.form.notvalidated\", this.onDone);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.form.validating\", this.onValidating);\n    this.core.off(\"core.form.valid\", this.onDone);\n    this.core.off(\"core.form.invalid\", this.onDone);\n    this.core.off(\"core.form.notvalidated\", this.onDone);\n    // Re-enable buttons when uninstalling\n    for (const btn of this.getButtons()) btn.disabled = false;\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface Bootstrap5Options {\n  validClass?: string;\n  invalidClass?: string;\n  [key: string]: unknown;\n}\n\nexport class Bootstrap5 extends Plugin<Bootstrap5Options> {\n  private trackedElements = new Set<HTMLElement>();\n\n  constructor(opts?: Bootstrap5Options) {\n    super({ validClass: \"is-valid\", invalidClass: \"is-invalid\", ...opts });\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n    const validClass = this.opts.validClass ?? \"is-valid\";\n    const invalidClass = this.opts.invalidClass ?? \"is-invalid\";\n\n    element.classList.toggle(validClass, valid);\n    element.classList.toggle(invalidClass, !valid);\n    this.trackedElements.add(element);\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    const validClass = this.opts.validClass ?? \"is-valid\";\n    const invalidClass = this.opts.invalidClass ?? \"is-invalid\";\n    for (const el of this.trackedElements) {\n      el.classList.remove(validClass, invalidClass);\n    }\n    this.trackedElements.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface BulmaOptions {\n  validClass?: string;\n  invalidClass?: string;\n  [key: string]: unknown;\n}\n\nexport class Bulma extends Plugin<BulmaOptions> {\n  private trackedElements = new Set<HTMLElement>();\n\n  constructor(opts?: BulmaOptions) {\n    super({ validClass: \"is-success\", invalidClass: \"is-danger\", ...opts });\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n    const validClass = this.opts.validClass ?? \"is-success\";\n    const invalidClass = this.opts.invalidClass ?? \"is-danger\";\n    element.classList.toggle(validClass, valid);\n    element.classList.toggle(invalidClass, !valid);\n    this.trackedElements.add(element);\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    const v = this.opts.validClass ?? \"is-success\";\n    const i = this.opts.invalidClass ?? \"is-danger\";\n    for (const el of this.trackedElements) {\n      el.classList.remove(v, i);\n    }\n    this.trackedElements.clear();\n  }\n}\n","import { Plugin } from \"../../core/Plugin\";\nimport type { ElementValidatedPayload } from \"../../core/types\";\n\nexport interface TailwindOptions {\n  /** Space-separated Tailwind classes for valid state */\n  validClass?: string;\n  /** Space-separated Tailwind classes for invalid state */\n  invalidClass?: string;\n  [key: string]: unknown;\n}\n\nexport class Tailwind extends Plugin<TailwindOptions> {\n  private trackedElements = new Set<HTMLElement>();\n\n  private applyClasses(element: HTMLElement, valid: boolean): void {\n    const validClasses = (this.opts.validClass ?? \"\").split(\" \").filter(Boolean);\n    const invalidClasses = (this.opts.invalidClass ?? \"\").split(\" \").filter(Boolean);\n    if (valid) {\n      element.classList.add(...validClasses);\n      element.classList.remove(...invalidClasses);\n    } else {\n      element.classList.add(...invalidClasses);\n      element.classList.remove(...validClasses);\n    }\n    this.trackedElements.add(element);\n  }\n\n  private onElementValidated = (payload: unknown): void => {\n    if (!this.isEnabled()) return;\n    const { element, valid } = payload as ElementValidatedPayload;\n    this.applyClasses(element, valid);\n  };\n\n  install(): void {\n    this.core.on(\"core.element.validated\", this.onElementValidated);\n  }\n\n  uninstall(): void {\n    this.core.off(\"core.element.validated\", this.onElementValidated);\n    const validClasses = (this.opts.validClass ?? \"\").split(\" \").filter(Boolean);\n    const invalidClasses = (this.opts.invalidClass ?? \"\").split(\" \").filter(Boolean);\n    for (const el of this.trackedElements) {\n      el.classList.remove(...validClasses, ...invalidClasses);\n    }\n    this.trackedElements.clear();\n  }\n}\n","// src/locales/en_US.ts\nimport type { LocaleData } from \"../core/types\";\n\nexport const en_US: LocaleData = {\n  notEmpty: { default: \"Please enter a value\" },\n  email: { default: \"Please enter a valid email address\" },\n  creditCard: { default: \"Please enter a valid credit card number\" },\n  date: { default: \"Please enter a valid date\" },\n  digits: { default: \"Please enter only digits\" },\n  integer: { default: \"Please enter a valid integer\" },\n  numeric: { default: \"Please enter a valid number\" },\n  regexp: { default: \"Please enter a value matching the required pattern\" },\n  uri: { default: \"Please enter a valid URL\" },\n  identical: { default: \"Please enter the same value\" },\n  different: { default: \"Please enter a different value\" },\n  between: { default: \"Please enter a value between the minimum and maximum\" },\n  greaterThan: { default: \"Please enter a value greater than or equal to the minimum\" },\n  lessThan: { default: \"Please enter a value less than or equal to the maximum\" },\n  stringLength: { default: \"Please enter a value with a valid length\" },\n  stringCase: { default: \"Please enter a value with the correct case\" },\n  choice: { default: \"Please choose the correct number of options\" },\n  file: { default: \"Please select a valid file\" },\n  callback: { default: \"Please enter a valid value\" },\n  promise: { default: \"Please enter a valid value\" },\n  remote: { default: \"Please enter a valid value\" },\n  ip: { default: \"Please enter a valid IP address\" },\n  base64: { default: \"Please enter a valid Base64 encoded string\" },\n  hex: { default: \"Please enter a valid hexadecimal number\" },\n  mac: { default: \"Please enter a valid MAC address\" },\n  bic: { default: \"Please enter a valid BIC/SWIFT code\" },\n  uuid: { default: \"Please enter a valid UUID\" },\n  color: { default: \"Please enter a valid color\" },\n  step: { default: \"Please enter a valid step value\" },\n  vin: { default: \"Please enter a valid VIN\" },\n  ean: { default: \"Please enter a valid EAN number\" },\n  isbn: { default: \"Please enter a valid ISBN number\" },\n  ismn: { default: \"Please enter a valid ISMN number\" },\n  issn: { default: \"Please enter a valid ISSN number\" },\n  grid: { default: \"Please enter a valid GRId\" },\n  cusip: { default: \"Please enter a valid CUSIP number\" },\n  isin: { default: \"Please enter a valid ISIN number\" },\n  sedol: { default: \"Please enter a valid SEDOL number\" },\n  imei: { default: \"Please enter a valid IMEI number\" },\n  imo: { default: \"Please enter a valid IMO number\" },\n  meid: { default: \"Please enter a valid MEID number\" },\n  ein: { default: \"Please enter a valid EIN number\" },\n  rtn: { default: \"Please enter a valid RTN\" },\n  siren: { default: \"Please enter a valid SIREN number\" },\n  siret: { default: \"Please enter a valid SIRET number\" },\n  iban: { default: \"Please enter a valid IBAN\" },\n  phone: { default: \"Please enter a valid phone number\" },\n  zipCode: { default: \"Please enter a valid zip code\" },\n  vat: {\n    default: \"Please enter a valid VAT number\",\n    country: \"Please enter a valid VAT number in %s\",\n  },\n  id: {\n    default: \"Please enter a valid national identification number\",\n    country: \"Please enter a valid national identification number in %s\",\n  },\n};\n","// src/locales/pt_BR.ts\nimport type { LocaleData } from \"../core/types\";\n\nexport const pt_BR: LocaleData = {\n  notEmpty: { default: \"Por favor, preencha este campo\" },\n  email: { default: \"Por favor, informe um endereço de e-mail válido\" },\n  creditCard: { default: \"Por favor, informe um número de cartão de crédito válido\" },\n  date: { default: \"Por favor, informe uma data válida\" },\n  digits: { default: \"Por favor, informe apenas dígitos\" },\n  integer: { default: \"Por favor, informe um número inteiro válido\" },\n  numeric: { default: \"Por favor, informe um valor numérico válido\" },\n  regexp: { default: \"Por favor, informe um valor que corresponda ao padrão exigido\" },\n  uri: { default: \"Por favor, informe uma URL válida\" },\n  identical: { default: \"Por favor, informe o mesmo valor\" },\n  different: { default: \"Por favor, informe um valor diferente\" },\n  between: { default: \"Por favor, informe um valor dentro do intervalo permitido\" },\n  greaterThan: { default: \"Por favor, informe um valor maior ou igual ao mínimo\" },\n  lessThan: { default: \"Por favor, informe um valor menor ou igual ao máximo\" },\n  stringLength: { default: \"Por favor, informe um valor com o comprimento correto\" },\n  stringCase: {\n    default: \"Por favor, informe um valor com o formato de maiúsculas/minúsculas correto\",\n  },\n  choice: { default: \"Por favor, selecione o número correto de opções\" },\n  file: { default: \"Por favor, selecione um arquivo válido\" },\n  callback: { default: \"Por favor, informe um valor válido\" },\n  promise: { default: \"Por favor, informe um valor válido\" },\n  remote: { default: \"Por favor, informe um valor válido\" },\n  ip: { default: \"Por favor, informe um endereço IP válido\" },\n  base64: { default: \"Por favor, informe uma string Base64 válida\" },\n  hex: { default: \"Por favor, informe um número hexadecimal válido\" },\n  mac: { default: \"Por favor, informe um endereço MAC válido\" },\n  bic: { default: \"Por favor, informe um código BIC/SWIFT válido\" },\n  uuid: { default: \"Por favor, informe um UUID válido\" },\n  color: { default: \"Por favor, informe uma cor válida\" },\n  step: { default: \"Por favor, informe um valor de passo válido\" },\n  vin: { default: \"Por favor, informe um VIN válido\" },\n  ean: { default: \"Por favor, informe um número EAN válido\" },\n  isbn: { default: \"Por favor, informe um número ISBN válido\" },\n  ismn: { default: \"Por favor, informe um número ISMN válido\" },\n  issn: { default: \"Por favor, informe um número ISSN válido\" },\n  grid: { default: \"Por favor, informe um GRId válido\" },\n  cusip: { default: \"Por favor, informe um número CUSIP válido\" },\n  isin: { default: \"Por favor, informe um número ISIN válido\" },\n  sedol: { default: \"Por favor, informe um número SEDOL válido\" },\n  imei: { default: \"Por favor, informe um número IMEI válido\" },\n  imo: { default: \"Por favor, informe um número IMO válido\" },\n  meid: { default: \"Por favor, informe um número MEID válido\" },\n  ein: { default: \"Por favor, informe um número EIN válido\" },\n  rtn: { default: \"Por favor, informe um RTN válido\" },\n  siren: { default: \"Por favor, informe um número SIREN válido\" },\n  siret: { default: \"Por favor, informe um número SIRET válido\" },\n  iban: { default: \"Por favor, informe um IBAN válido\" },\n  phone: { default: \"Por favor, informe um número de telefone válido\" },\n  zipCode: { default: \"Por favor, informe um CEP válido\" },\n  vat: {\n    default: \"Por favor, insira um número de IVA válido\",\n    country: \"Por favor, insira um número de IVA válido para %s\",\n  },\n  id: {\n    default: \"Por favor, insira um número de identificação nacional válido\",\n    country: \"Por favor, insira um número de identificação nacional válido para %s\",\n  },\n};\n"],"mappings":"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;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC,KAAK;AACH,eAAO,EAAE,OAAO,MAAM,MAAM,KAAK,EAAE;AAAA,MACrC;AACE,eAAO,EAAE,OAAO,KAAK;AAAA,IACzB;AAAA,EACF;AACF;;;AC90BA,IAAMK,cAAa;AAAA,EACjB,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B;AAEA,SAASC,MAAK,OAAwB;AACpC,MAAI,MAAM;AACV,MAAI,MAAM;AACV,MAAI,SAAS,MAAM;AACnB,SAAO,UAAU;AACf,WAAOD,YAAW,GAAG,EAAE,OAAO,SAAS,MAAM,OAAO,MAAM,GAAG,EAAE,CAAC;AAChE,UAAM,IAAI;AAAA,EACZ;AACA,SAAO,MAAM,OAAO,KAAK,MAAM;AACjC;AAEA,SAASE,YAAW,OAAwB;AAC1C,QAAM,SAAS,MAAM;AACrB,MAAI,QAAQ;AACZ,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,cAAY,SAAS,MAAM,IAAK,KAAM,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK;AAAA,EAChF;AACA,SAAO,UAAU;AACnB;AAEA,SAASC,aAAY,MAAc,OAAe,KAAa,eAAe,OAAgB;AAC5F,MAAI,OAAO,MAAM,IAAI,KAAK,OAAO,MAAM,KAAK,KAAK,OAAO,MAAM,GAAG,EAAG,QAAO;AAC3E,MAAI,OAAO,KAAK,SAAS,KAAK,QAAQ,GAAI,QAAO;AACjD,QAAM,UAAU;AAAA,IACd;AAAA,IACA,OAAO,QAAQ,KAAM,OAAO,QAAQ,KAAK,OAAO,MAAM,IAAK,KAAK;AAAA,IAChE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,OAAO,KAAK,OAAO,QAAQ,QAAQ,CAAC;AAC7C;AAGA,IAAM,aAAa;AAAA,EACjB,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B;AAEA,IAAM,aAAa;AAAA,EACjB,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B;AAEA,SAAS,SAASC,SAA2B;AAC3C,QAAM,WAAW,CAAC,GAAGA,OAAM,EAAE,QAAQ;AACrC,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,QAAI,WAAW,CAAC,EAAE,WAAW,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAAA,EAClD;AACA,SAAO,MAAM;AACf;AAIA,SAAS,KAAK,OAAe,aAA8B;AACzD,MAAI,CAAC,WAAW,KAAK,KAAK,EAAG,QAAO;AACpC,QAAM,MAAM,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,QAAM,QAAQ,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACpD,QAAM,KAAK,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACjD,QAAM,IAAI,OAAO,SAAS,MAAM,OAAO,IAAI,CAAC,GAAG,EAAE;AACjD,MAAI,MAAM,MAAM,QAAQ,GAAI,QAAO;AACnC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YACG,IAAI,MAAM,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,SAAS,MAAM,OAAO,IAAI,CAAC,GAAG,EAAE;AAAA,EAC7F;AACA,QAAM,KAAM,MAAM;AAClB,MAAI,QAAQ,MAAM,QAAQ,GAAI,OAAM;AACpC,MAAI,QAAQ,EAAG,QAAO;AACtB,UAAQ,YAAY,YAAY,GAAG;AAAA,IACjC,KAAK;AACH,aAAO,MAAM,MAAM,MAAM;AAAA,IAC3B,KAAK;AACH,aAAO,MAAM,MAAM,MAAM;AAAA,IAC3B,KAAK;AACH,aAAO,MAAM,MAAM,MAAM;AAAA,IAC3B,KAAK;AACH,aAAO,MAAM,MAAM,MAAM;AAAA,IAC3B,KAAK;AACH,aAAO,MAAM,MAAM,MAAM;AAAA,IAC3B;AACE,aAAO;AAAA,EACX;AACF;AAIA,SAAS,KAAK,OAAwB;AACpC,QAAM,IAAI,MAAM,QAAQ,OAAO,EAAE;AACjC,SAAO,YAAY,KAAK,CAAC;AAC3B;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,WAAW,KAAK,KAAK,EAAG,QAAO;AACpC,MAAI,QAAQ,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,QAAM,MAAM,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,MAAI,OAAO,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACjD,MAAI,QAAQ,IAAI;AACd,aAAS;AACT,YAAQ;AAAA,EACV,WAAW,QAAQ,IAAI;AACrB,aAAS;AACT,YAAQ;AAAA,EACV,OAAO;AACL,YAAQ;AAAA,EACV;AACA,MAAI,CAACD,aAAY,MAAM,OAAO,GAAG,EAAG,QAAO;AAC3C,QAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AAC1C,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,WAAO,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC;AAAA,EACxD;AACA,SAAQ,MAAM,KAAM,OAAO,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE;AAChE;AAEA,SAAS,KAAK,OAAwB;AACpC,QAAM,IAAI,MAAM,QAAQ,UAAU,EAAE;AACpC,MAAI,CAAC,WAAW,KAAK,CAAC,EAAG,QAAO;AAChC,MAAI,cAAc,KAAK,CAAC,EAAG,QAAO;AAClC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,WAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,KAAK;AAAA,EAClD;AACA,MAAI,YAAY,KAAM,MAAM;AAC5B,MAAI,cAAc,MAAM,cAAc,GAAI,aAAY;AACtD,MAAI,cAAc,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,EAAG,QAAO;AAC3D,QAAM;AACN,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,KAAK;AAAA,EAClD;AACA,cAAY,KAAM,MAAM;AACxB,MAAI,cAAc,MAAM,cAAc,GAAI,aAAY;AACtD,SAAO,cAAc,OAAO,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE;AACvD;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,wDAAwD,KAAK,KAAK,EAAG,QAAO;AACjF,QAAM,IAAI,MAAM,QAAQ,OAAO,EAAE,EAAE,OAAO,CAAC;AAC3C,QAAM,SAAS,EAAE;AACjB,QAAM,SAAS,WAAW,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5C,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,SAAS,GAAG,KAAK;AACnC,WAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,IAAI,CAAC;AAAA,EACxD;AACA,QAAM,KAAM,MAAM;AAClB,SAAO,GAAG,GAAG,OAAO,EAAE,OAAO,SAAS,CAAC;AACzC;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,uBAAuB,KAAK,KAAK,EAAG,QAAO;AAChD,QAAM,IAAI,MAAM,QAAQ,KAAK,EAAE,EAAE,YAAY;AAC7C,QAAMC,UAAS,EAAE,MAAM,GAAG,EAAE;AAC5B,QAAM,YAAY,EAAE,MAAM,EAAE;AAC5B,QAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACtC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAIA,QAAO,QAAQ,KAAK;AACtC,WAAO,OAAO,SAASA,QAAO,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,OAAO,SAASA,QAAO,SAAS,CAAC;AAAA,EACzF;AACA,QAAM,MAAM,KAAM,MAAM;AACxB,MAAI;AACJ,MAAI,QAAQ,GAAI,YAAW;AAAA,WAClB,QAAQ,GAAI,YAAW;AAAA,MAC3B,YAAW,GAAG,GAAG;AACtB,SAAO,aAAa;AACtB;AAEA,SAAS,KAAK,OAAwB;AACpC,QAAM,IAAI,MAAM,KAAK;AACrB,MAAI,CAAC,WAAW,KAAK,CAAC,KAAK,CAAC,oBAAoB,KAAK,CAAC,EAAG,QAAO;AAChE,QAAM,qBAAoF;AAAA,IACxF,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,IACf;AAAA,IACA,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE;AAAA,IAC/C,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACxC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAChD,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC/B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC5B,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAC1B,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;AAAA,MACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,IAC/B;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC/B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAChC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC9B,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,IACvC;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,MACV,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACnC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,IAClB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAC1B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACvB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MACnB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAClC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC/B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,IACzB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAC1B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAC1B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,IACrB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC1C,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAC1B,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE;AAAA,MACnB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MACtC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,MACd,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC/B,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,IACF;AAAA,IACA,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE;AAAA,IACvD,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAChC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MACpC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAChC,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACpC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAC3B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;AAAA,MAChC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MACnC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC7B,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,IAC3B;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MACvC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC1C,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MACpC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAChC,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAChC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAC1B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,IAC3B;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,MACd,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACvB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,MACd,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC5B,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC/B,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,IAC3B;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;AAAA,MACpC,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,MACd,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,IAC9B;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAChC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,MACd,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,IAC3B;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAChC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACjC,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,MACd,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC9B,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,MACX,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC3B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;AAAA,MACpC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MACpC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MACpC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACtC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC7B,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC/B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,GAAG,CAAC;AAAA,IACX;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACpC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,MACV,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;AAAA,MACzB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;AAAA,MAChC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;AAAA,MACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MACnB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,IACpB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAChC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;AAAA,MACzB,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;AAAA,MAC1C,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACtC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MACtC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,IACrB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MAC1C,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,MAChB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,MACV,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE;AAAA,MAC7B,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,MAChB,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC9B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAChC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACxB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,EAAE;AAAA,MACjC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACvB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACvB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MACrC,IAAI,CAAC,CAAC;AAAA,MACN,IAAI,CAAC,CAAC;AAAA,MACN,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MACnB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,IAC3B;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC5B,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MAClB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,IAC3B;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,MAChB,GAAG,CAAC,GAAG,CAAC;AAAA,MACR,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACf,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,IACF;AAAA,IACA,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE;AAAA,IACzE,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC1D,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACtB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAC1B,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC7B,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAC5B,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE;AAAA,MAC3B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAAA,MACjD,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACzB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MACvB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAChB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,IACrB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAClC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE;AAAA,MACnB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC5B,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,IAC/B;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MAC1C,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC5B,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACvB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE;AAAA,MACjB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACtB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAChB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACpB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,IAClB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MACxB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAC1B,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,IAClB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MAClC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,MACd,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,QACP,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC5B,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACxB,GAAG,CAAC,GAAG,CAAC;AAAA,MACR,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,MACd,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC5B,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACpB,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACpB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,IACrB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAClB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAChB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MAChB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI;AAAA,QACF,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE;AAAA,MAC5B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACvB,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;AAAA,MACxB,GAAG;AAAA,QACD,CAAC,GAAG,CAAC;AAAA,QACL,CAAC,IAAI,EAAE;AAAA,MACT;AAAA,MACA,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,IACpB;AAAA,IACA,IAAI;AAAA,MACF,GAAG,CAAC,CAAC;AAAA,MACL,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;AAAA,MACd,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,MACV,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE;AAAA,MACjB,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE;AAAA,MACjB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,EAAE;AAAA,MAC7B,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACtB,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAAA,MACzB,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;AAAA,MACnB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,IACb;AAAA,IACA,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;AAAA,IACb,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;AAAA,IACb,IAAI,EAAE,GAAG,CAAC,CAAC,EAAE;AAAA,EACf;AACA,QAAM,aAAa,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AACrD,QAAM,cAAc,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AACtD,QAAM,SAAS,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AACjD,MAAI,CAAC,mBAAmB,UAAU,KAAK,CAAC,mBAAmB,UAAU,EAAE,WAAW,EAAG,QAAO;AAC5F,QAAM,WAAW,mBAAmB,UAAU,EAAE,WAAW;AAC3D,MAAI,UAAU;AACd,WAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,UAAM,IAAI,SAAS,CAAC;AACpB,QAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,UAAU,EAAE,CAAC,IAAI,WAAW,GAAG;AACtE,gBAAU;AACV;AAAA,IACF;AAAA,EACF;AACA,MAAI,CAAC,QAAS,QAAO;AACrB,MAAI;AACJ,MAAI,EAAE,WAAW,IAAI;AACnB,UAAM,EAAE,OAAO,GAAG,CAAC;AAAA,EACrB,OAAO;AACL,UAAM,KAAK,EAAE,OAAO,GAAG,CAAC,CAAC;AAAA,EAC3B;AACA,QAAM,OAAO,OAAO,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,EAAE;AACjD,QAAM,QAAQ,OAAO,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,QAAM,MAAM,OAAO,SAAS,IAAI,OAAO,GAAG,CAAC,GAAG,EAAE;AAChD,MAAI,CAACD,aAAY,MAAM,OAAO,GAAG,EAAG,QAAO;AAC3C,MAAI,EAAE,WAAW,IAAI;AACnB,UAAM,SAAS,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;AACnE,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,aAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC;AAAA,IACpD;AACA,WAAO,KAAM,MAAM,MAAO;AAC1B,UAAM,WAAW,EAAE,OAAO,EAAE,EAAE,YAAY,MAAM,MAAM,OAAO,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI;AAC1F,WAAO,aAAa;AAAA,EACtB;AACA,SAAO;AACT;AAEA,SAAS,KAAK,OAAwB;AACpC,QAAM,IAAI,MAAM,QAAQ,OAAO,EAAE,EAAE,QAAQ,KAAK,EAAE;AAClD,MAAI,CAAC,aAAa,KAAK,CAAC,EAAG,QAAO;AAClC,QAAM,SAAS,EAAE;AACjB,QAAM,SAAS,CAAC,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACxE,MAAI,MAAM;AACV,WAAS,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK;AACpC,WAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC;AAAA,EACpD;AACA,QAAM,MAAM;AACZ,MAAI,OAAO,EAAG,OAAM,KAAK;AACzB,SAAO,GAAG,GAAG,OAAO,EAAE,OAAO,SAAS,CAAC;AACzC;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,aAAa,KAAK,KAAK,EAAG,QAAO;AACtC,MAAI,OAAO,OAAO,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACxD,QAAM,QAAS,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,KAAM;AAC/D,QAAM,MAAM,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,MAAI,MAAM,WAAW,GAAG;AACtB,QAAI,QAAQ,KAAM,SAAQ;AAC1B,QAAI,OAAO,KAAM,QAAO;AAAA,EAC1B,WAAW,OAAO,MAAM;AACtB,YAAQ;AAAA,EACV;AACA,MAAI,CAACA,aAAY,MAAM,OAAO,GAAG,EAAG,QAAO;AAC3C,MAAI,MAAM,WAAW,IAAI;AACvB,QAAI,QAAQ,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI;AACtD,QAAI,OAAO,KAAM,SAAQ,QAAQ;AACjC,WAAO,GAAG,KAAK,OAAO,MAAM,OAAO,GAAG,CAAC;AAAA,EACzC;AACA,SAAO;AACT;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,6BAA6B,KAAK,KAAK,EAAG,QAAO;AACtD,QAAM,IAAI,MAAM,QAAQ,MAAM,EAAE;AAChC,QAAM,MAAM,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC9C,QAAM,QAAQ,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAChD,MAAI,OAAO,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC7C,UAAQ,MAAM;AAAA,IACZ,MAAK,OAAO,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,MAAM,QAAQ;AACjD,cAAQ;AACR;AAAA,IACF,KAAK,OAAO,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM;AAAA,IACrC,MAAK,KAAK,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,MAAM,QAAQ;AAC/C,cAAQ;AACR;AAAA,IACF;AACE,cAAQ;AACR;AAAA,EACJ;AACA,SAAOA,aAAY,MAAM,OAAO,GAAG;AACrC;AAEA,SAAS,KAAK,OAAwB;AACpC,QAAM,QAAQ,mCAAmC,KAAK,KAAK;AAC3D,QAAM,QAAQ,gDAAgD,KAAK,KAAK;AACxE,QAAM,QAAQ,8CAA8C,KAAK,KAAK;AACtE,MAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAO,QAAO;AACvC,MAAI,IAAI,MAAM,QAAQ,MAAM,EAAE;AAC9B,MAAI,SAAS,OAAO;AAClB,UAAM,QAAQ,MAAM,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvC,QAAI,UAAU,GAAI,KAAI,GAAG,KAAK,GAAG,EAAE,OAAO,CAAC,CAAC;AAC5C,UAAME,SAAQ,0BAA0B,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE;AAChF,WAAOA,WAAU,EAAE,OAAO,GAAG,CAAC;AAAA,EAChC;AACA,QAAM,QAAQ,EAAE,OAAO,GAAG,CAAC;AAC3B,QAAM,SAAS,EAAE,CAAC;AAClB,QAAM,UAAU,EAAE,MAAM,EAAE;AAC1B,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,QAAI,IAAI,MAAM,GAAG;AACf,aAAO,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE;AAAA,IACrC,OAAO;AACL,YAAM,MAAM,GAAG,OAAO,SAAS,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC;AAChD,aAAO,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE;AACjC,UAAI,IAAI,WAAW,EAAG,QAAO,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE;AAAA,IACzD;AAAA,EACF;AACA,QAAM,YAAY,MAAM,KAAK,MAAM,MAAM,EAAE,IAAI;AAC/C,QAAM,MAAM,cAAc,IAAI,KAAK,YAAY;AAC/C,MAAI,MAAM,QAAQ,MAAM,MAAM,GAAI,QAAO,YAAY,aAAa,GAAG;AACrE,MAAI,OAAO,QAAQ,MAAM,MAAM,GAAI,QAAO,YAAY,GAAG,GAAG;AAC5D,SAAO,YAAY,GAAG,GAAG,MAAM,YAAY,aAAa,GAAG;AAC7D;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,oDAAoD,KAAK,KAAK,EAAG,QAAO;AAC7E,QAAM,MAAM,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,QAAM,QAAQ,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACpD,MAAI,OAAO,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACjD,QAAM,YAAoC,EAAE,KAAK,MAAM,KAAK,MAAM,GAAG,IAAK;AAC1E,SAAO,UAAU,MAAM,OAAO,CAAC,CAAC,IAAI;AACpC,MAAI,CAACF,aAAY,MAAM,OAAO,GAAG,EAAG,QAAO;AAC3C,QAAM,aAAa,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACzD,MAAI,aAAa,EAAG,QAAO;AAC3B,QAAM,IAAI,OAAO,SAAS,GAAG,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE;AAC1E,SAAO,kCAAkC,OAAO,IAAI,EAAE,MAAM,MAAM,OAAO,EAAE;AAC7E;AAEA,SAAS,KAAK,OAAwB;AACpC,QAAM,IAAI,MAAM,YAAY;AAC5B,MAAI,CAAC,0DAA0D,KAAK,CAAC,EAAG,QAAO;AAC/E,QAAM,MAAM,EAAE,OAAO,GAAG,CAAC;AACzB,MAAI;AACJ,UAAQ,MAAM;AAAA,IACZ,KAAK,UAAU,KAAK,GAAG;AACrB,mBAAa;AACb;AAAA,IACF,KAAK,QAAQ;AACX,mBAAa,GAAG,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,MAAM,OAAO,CAAC,CAAC;AACtD;AAAA,IACF,KAAK,QAAQ;AACX,mBAAa,GAAG,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,MAAM,OAAO,CAAC,CAAC;AACtD;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACA,QAAM,MAAM,KAAM,OAAO,SAAS,WAAW,OAAO,GAAG,EAAE,GAAG,EAAE,IAAI;AAClE,QAAM,iBAAiB,MAAM,KAAK,IAAI,GAAG,KAAK,GAAG,GAAG;AACpD,SAAO,mBAAmB,WAAW,OAAO,EAAE;AAChD;AAEA,SAAS,KAAK,OAAwB;AACpC,QAAM,IAAI,MAAM,YAAY;AAC5B,MAAI,CAAC,gCAAgC,KAAK,CAAC,EAAG,QAAO;AACrD,QAAM,WAAW;AACjB,QAAM,YAAY,EAAE,OAAO,CAAC;AAC5B,QAAM,aAAa,EAAE,OAAO,CAAC;AAC7B,MAAI,MAAM;AACV,MAAI;AACJ,MAAI,UAAU,KAAK,UAAU,GAAG;AAC9B,WAAO,KAAK,KAAK,SAAS,QAAQ,SAAS;AAC3C,WAAO,KAAK,KAAK,SAAS,QAAQ,UAAU;AAC5C,iBAAa,EAAE,OAAO,CAAC;AAAA,EACzB,OAAO;AACL,WAAO,IAAI;AACX,WAAO,KAAK,KAAK,SAAS,QAAQ,SAAS;AAC3C,iBAAa,EAAE,OAAO,CAAC;AAAA,EACzB;AACA,QAAM,SAAS,WAAW;AAC1B,WAAS,IAAI,GAAG,IAAI,SAAS,GAAG,KAAK;AACnC,YAAQ,IAAI,KAAK,OAAO,SAAS,WAAW,OAAO,CAAC,GAAG,EAAE;AAAA,EAC3D;AACA,QAAM,YAAY,MAAM;AACxB,QAAM,aAAa,cAAc,IAAI,MAAM,KAAK,cAAc,KAAK,MAAM,GAAG,KAAK,SAAS;AAC1F,SAAO,eAAe,WAAW,OAAO,SAAS,CAAC;AACpD;AAEA,SAAS,KAAK,OAAwB;AACpC,SAAO,cAAc,KAAK,KAAK,KAAKD,YAAW,KAAK;AACtD;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,gBAAgB,KAAK,KAAK,EAAG,QAAO;AACzC,QAAME,UAAS,MAAM,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,OAAO,SAAS,GAAG,EAAE,CAAC;AAChE,SAAO,SAASA,OAAM;AACxB;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,uBAAuB,KAAK,KAAK,EAAG,QAAO;AAChD,QAAM,gBAAgB,CAAC,MAAsB;AAC3C,QAAI,QAAQ;AACZ,WAAO,MAAM,SAAS,EAAG,SAAQ,IAAI,KAAK;AAC1C,UAAM,WAAW;AACjB,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAO,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,IAAI;AAAA,IACrD;AACA,WAAO,IAAI,SAAS,QAAQ,MAAM,OAAO,CAAC,CAAC;AAC3C,WAAO,SAAS,MAAM,EAAE;AAAA,EAC1B;AACA,QAAM,UACJ,MAAM,WAAW,MAAM,MAAM,OAAO,CAAC,MAAM,OAAO,MAAM,OAAO,CAAC,MAAM,OAClE,MAAM,OAAO,CAAC,MAAM,cAAc,GAAG,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,CAAC,EAAE,IAC3E,MAAM,OAAO,CAAC,MAAM,cAAc,MAAM,OAAO,GAAG,CAAC,CAAC;AAC1D,SAAO;AACT;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,YAAY,KAAK,KAAK,EAAG,QAAO;AACrC,SAAOH,MAAK,KAAK;AACnB;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,6BAA6B,KAAK,KAAK,EAAG,QAAO;AACtD,QAAM,IAAI,MAAM,QAAQ,MAAM,EAAE;AAChC,QAAM,MAAM,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC9C,QAAM,QAAQ,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAChD,MAAI,OAAO,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC7C,QAAM,UAAU,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;AAC/C,SAAO,YAAY,IAAI,OAAO,QAAQ,KAAK,WAAW,MAAM;AAC5D,MAAI,CAACE,aAAY,MAAM,OAAO,KAAK,IAAI,EAAG,QAAO;AACjD,QAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACtC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,WAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC;AAAA,EACpD;AACA,QAAM,KAAM,MAAM;AAClB,SAAO,GAAG,GAAG,OAAO,EAAE,OAAO,CAAC;AAChC;AAEA,SAAS,KAAK,OAAwB;AACpC,QAAM,IAAI,MAAM,QAAQ,KAAK,EAAE;AAC/B,MAAI,CAAC,WAAW,KAAK,CAAC,EAAG,QAAO;AAChC,QAAM,SAAS,EAAE,OAAO,CAAC;AACzB,MAAI,OAAO,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC7C,QAAM,QAAQ,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAChD,QAAM,MAAM,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC9C,UAAQ,QAAQ;AAAA,IACd,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,cAAQ;AACR;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,cAAQ;AACR;AAAA,IACF;AACE,cAAQ;AACR;AAAA,EACJ;AACA,MAAI,CAACA,aAAY,MAAM,OAAO,GAAG,EAAG,QAAO;AAC3C,QAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClD,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO,OAAO,CAAC,IAAI,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,EACpD;AACA,QAAM,cAAc,KAAM,MAAM,MAAO;AACvC,SAAO,GAAG,UAAU,OAAO,EAAE,OAAO,EAAE;AACxC;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,cAAc,KAAK,KAAK,EAAG,QAAO;AACvC,QAAM,SAAS,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE;AAClD,QAAM,SAAS,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACrD,QAAM,QAAQ,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACpD,QAAM,MAAM,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,QAAM,UAAU,SAAS,MAAM,IAAI,KAAK,SAAS,IAAI,MAAM,SAAS,KAAK;AACzE,QAAM,OAAO,UAAU,MAAM;AAC7B,MAAI,CAACA,aAAY,MAAM,OAAO,KAAK,IAAI,EAAG,QAAO;AACjD,QAAM,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC7C,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;AAAA,EACzD;AACA,QAAM,MAAM;AACZ,MAAI,QAAQ,GAAI,QAAO,GAAG,GAAG,OAAO,MAAM,OAAO,EAAE;AACnD,QAAM,UAAU,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC7C,QAAM;AACN,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;AAAA,EACzD;AACA,QAAM,MAAM;AACZ,MAAI,QAAQ,GAAI,OAAM;AACtB,SAAO,GAAG,GAAG,OAAO,MAAM,OAAO,EAAE;AACrC;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,6BAA6B,KAAK,KAAK,EAAG,QAAO;AACtD,QAAM,IAAI,MAAM,QAAQ,OAAO,EAAE;AACjC,QAAM,MAAM,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC9C,QAAM,QAAQ,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAChD,MAAI,OAAO,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC7C,SAAO,OAAO,OAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI;AACxD,MAAI,CAACA,aAAY,MAAM,OAAO,KAAK,IAAI,EAAG,QAAO;AACjD,QAAM,SAAS,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC7C,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC;AAAA,EACpD;AACA,SAAQ,MAAM,KAAK,KAAM;AACzB,SAAO,GAAG,GAAG,OAAO,EAAE,OAAO,EAAE;AACjC;AAEA,SAAS,KAAK,OAAwB;AACpC,QAAM,IAAI,MAAM,YAAY;AAC5B,MAAI,CAAC,oCAAoC,KAAK,CAAC,EAAG,QAAO;AACzD,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,OAAO,EAAE,OAAO,GAAG,CAAC;AAC1B,MAAI,eAAe,QAAQ,IAAI,KAAK,EAAG,QAAO;AAC9C,QAAM,SAAS,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AACjD,QAAM,QAAQ,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAChD,QAAM,MAAM,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC9C,QAAM,OAAO,UAAU,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,OAAO,SAAS,MAAO;AACnE,MAAI,CAACA,aAAY,MAAM,OAAO,GAAG,EAAG,QAAO;AAC3C,QAAM,SAAS,EAAE,OAAO,EAAE;AAC1B,MAAI,WAAW,OAAO,WAAW,IAAK,QAAO;AAC7C,QAAM,QAAQ,EAAE,OAAO,IAAI,CAAC;AAC5B,QAAM,SAAS;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,MAAI,OAAO,QAAQ,KAAK,MAAM,GAAI,QAAO;AACzC,QAAM,WAAW;AACjB,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,EAAE,SAAS,GAAG,KAAK;AACrC,YAAQ,KAAK,KAAK,SAAS,QAAQ,EAAE,OAAO,CAAC,CAAC;AAAA,EAChD;AACA,SAAO,KAAM,MAAM,MAAO;AAC1B,SAAO,GAAG,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;AAC3C;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,WAAW,KAAK,KAAK,EAAG,QAAO;AACpC,QAAM,OAAO,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACnD,QAAM,QAAQ,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACpD,QAAM,MAAM,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,MAAI,CAACA,aAAY,OAAO,MAAM,OAAO,GAAG,KAAK,CAACA,aAAY,OAAO,KAAM,OAAO,GAAG,EAAG,QAAO;AAC3F,QAAM,eAAe,MAAM,OAAO,GAAG,CAAC;AACtC,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,aAAa,QAAQ,YAAY,MAAM;AAChD;AAEA,SAASG,MAAK,OAAwB;AACpC,MAAI,MAAM,SAAS,EAAG,QAAO;AAC7B,MAAI,IAAI;AACR,MAAI,EAAE,WAAW,EAAG,KAAI,IAAI,CAAC;AAC7B,MAAI,CAAC,6CAA6C,KAAK,CAAC,EAAG,QAAO;AAClE,MAAI,EAAE,QAAQ,OAAO,EAAE;AACvB,MAAI,OAAO,SAAS,GAAG,EAAE,MAAM,EAAG,QAAO;AACzC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,EAAE,SAAS,GAAG,KAAK;AACrC,YAAQ,IAAI,KAAK,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,EAClD;AACA,QAAM,MAAM;AACZ,MAAI,QAAQ,GAAI,QAAO;AACvB,SAAO,GAAG,GAAG,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;AAC3C;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,WAAW,KAAK,KAAK,EAAG,QAAO;AACpC,QAAM,UAAU,CAAC,MAAsB;AACrC,UAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACzC,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,aAAO,OAAO,CAAC,IAAI,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,IACpD;AACA,WAAO,KAAM,MAAM;AAAA,EACrB;AACA,QAAM,WAAW,CAAC,MAAsB;AACtC,UAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC5C,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,aAAO,OAAO,CAAC,IAAI,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,IACpD;AACA,WAAO,KAAM,MAAM;AAAA,EACrB;AACA,SAAO,GAAG,QAAQ,KAAK,CAAC,OAAO,MAAM,OAAO,IAAI,CAAC,KAAK,GAAG,SAAS,KAAK,CAAC,OAAO,MAAM,OAAO,EAAE;AAChG;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,mBAAmB,KAAK,KAAK,EAAG,QAAO;AAC5C,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACtC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,WAAO,OAAO,CAAC,IAAI,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE;AAAA,EACxD;AACA,QAAM,KAAK,MAAM;AACjB,QAAM,aAAa,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE;AACvD,QAAM,YAAY,cAAc,OAAO,EAAE;AACzC,SAAO,MAAM,OAAO,CAAC,MAAM,GAAG,UAAU,MAAM,MAAM,OAAO,CAAC,MAAM;AACpE;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,cAAc,KAAK,KAAK,EAAG,QAAO;AACvC,QAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/C,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO,OAAO,CAAC,IAAI,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE;AAAA,EACxD;AACA,QAAM,MAAM;AACZ,MAAI,QAAQ,EAAG,OAAM;AACrB,QAAM,KAAK;AACX,SAAO,GAAG,GAAG,OAAO,MAAM,OAAO,EAAE;AACrC;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,cAAc,KAAK,KAAK,EAAG,QAAO;AACvC,QAAM,SAAS,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE;AAClD,MAAI,WAAW,KAAK,WAAW,KAAK,WAAW,EAAG,QAAO;AACzD,QAAM,SAAS,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACrD,QAAM,QAAQ,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACpD,QAAM,MAAM,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,MAAI,MAAM,MAAM,QAAQ,GAAI,QAAO;AACnC,QAAM,YAAoC;AAAA,IACxC,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,EACP;AACA,MAAI,WAAW,GAAG;AAChB,UAAM,QAAQ,UAAU,GAAG,MAAM,EAAE,KAAK,QAAQ;AAChD,QAAI,CAACH,aAAY,MAAM,OAAO,GAAG,EAAG,QAAO;AAAA,EAC7C;AACA,QAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClD,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC;AAAA,EACxD;AACA,QAAM,MAAM;AACZ,MAAI,QAAQ,GAAI,OAAM;AACtB,SAAO,GAAG,GAAG,OAAO,MAAM,OAAO,EAAE;AACrC;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,cAAc,KAAK,KAAK,KAAK,CAAC,yBAAyB,KAAK,KAAK,EAAG,QAAO;AAChF,QAAM,IAAI,MAAM,QAAQ,WAAW,EAAE;AACrC,QAAM,OAAO,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE,IAAI;AACnD,QAAM,QAAQ,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAChD,QAAM,MAAM,OAAO,SAAS,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE;AAC9C,MAAI,CAACA,aAAY,MAAM,OAAO,GAAG,EAAG,QAAO;AAC3C,SAAOF,MAAK,CAAC;AACf;AAEA,SAAS,KAAK,OAAwB;AACpC,SAAO,UAAU,KAAK,KAAK;AAC7B;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,MAAM,WAAW,GAAI,QAAO;AAChC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,KAAK;AAAA,EACtD;AACA,UAAQ,KAAM,MAAM,MAAO,OAAO,OAAO,SAAS,MAAM,OAAO,EAAE,GAAG,EAAE;AACxE;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,MAAM,WAAW,GAAI,QAAO;AAChC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,WAAO,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE;AAAA,EAC5C;AACA,SAAO,MAAM,OAAO,OAAO,SAAS,MAAM,OAAO,EAAE,GAAG,EAAE;AAC1D;AAEA,SAAS,KAAK,OAAwB;AACpC,QAAM,IAAI,MAAM,YAAY;AAC5B,MAAI,CAAC,sBAAsB,KAAK,CAAC,EAAG,QAAO;AAC3C,QAAM,SAAS,EAAE;AACjB,QAAM,WAAW;AACjB,QAAM,cAAc,SAAS,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI;AACpD,QAAM,cAAc,KAAK,MAAM,cAAc,EAAE,IAAK,cAAc,MAAO,SAAS;AAClF,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,SAAS,GAAG,KAAK;AACnC,WAAO,OAAO,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,SAAS,IAAI;AAAA,EAC1D;AACA,UAAQ,cAAc,MAAM,OAAO,SAAS,EAAE,OAAO,SAAS,CAAC,GAAG,EAAE,KAAK,OAAO;AAClF;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,UAAU,KAAK,KAAK,EAAG,QAAO;AACnC,QAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AACnC,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,WAAO,OAAO,SAAS,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC;AAAA,EACxD;AACA,QAAM,MAAM;AACZ,MAAI,MAAM,EAAG,OAAM,KAAK;AACxB,SAAO,GAAG,GAAG,OAAO,MAAM,OAAO,CAAC;AACpC;AAEA,SAAS,KAAK,OAAwB;AACpC,MAAI,CAAC,6BAA6B,KAAK,KAAK,EAAG,QAAO;AACtD,QAAM,SAAS,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACrD,QAAM,eAAc,oBAAI,KAAK,GAAE,YAAY,IAAI;AAC/C,QAAM,QAAQ,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AACpD,QAAM,MAAM,OAAO,SAAS,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;AAClD,QAAM,OAAO,UAAU,cAAc,SAAS,OAAO,SAAS;AAC9D,MAAI,CAACE,aAAY,MAAM,OAAO,GAAG,EAAG,QAAO;AAC3C,SAAOF,MAAK,KAAK;AACnB;AAIA,IAAMM,iBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,KAAuB,OAAO;AAAA,EACzC,SAAS,OAAO;AACd,QAAI,MAAM,UAAU,GAAI,QAAO,EAAE,OAAO,KAAK;AAC7C,UAAM,WAAY,MAAM,QAAQ,WAAkC,IAAI,YAAY;AAClF,QAAI,CAAC,WAAW,CAACA,eAAc,IAAI,OAAO,EAAG,QAAO,EAAE,OAAO,KAAK;AAClE,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE;AAAA,MAC1C,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE;AAAA,MAC1C,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE;AAAA,MAC1C,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAOD,MAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE;AAAA,MAC1C,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,OAAO,IAAI,EAAE;AAAA,MAC1C,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC,KAAK;AACH,eAAO,EAAE,OAAO,KAAK,MAAM,KAAK,EAAE;AAAA,MACpC;AACE,eAAO,EAAE,OAAO,KAAK;AAAA,IACzB;AAAA,EACF;AACF;;;ACvoDA,IAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA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","names":["digits","luhn","digits","weight","sum","id","LUHN_TABLE","luhn","mod11And10","isValidDate","digits","check","nlId","COUNTRY_CODES","COUNTRY_CODES","digits","LUHN_TABLE","luhn","digits","LUHN_TABLE","luhn","LUHN_TABLE","luhn","digits","COUNTRY_CODES","COUNTRY_CODES","id"]}