{"version":3,"file":"main.mjs","sources":["../../../../node_modules/@babel/runtime/helpers/esm/toArray.js","../../../../src/_common/js/upload/main.ts"],"sourcesContent":["import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _toArray(r) {\n  return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();\n}\nexport { _toArray as default };","import { isFunction, isNumber } from 'lodash-es';\n/* eslint-disable no-param-reassign */\nimport { getCurrentDate, isOverSizeLimit } from './utils';\nimport xhr from './xhr';\nimport log from '../log/log';\nimport {\n  UploadFile,\n  SizeLimitObj,\n  FileChangeParams,\n  FileChangeReturn,\n  RequestMethodResponse,\n  HandleUploadParams,\n  SuccessContext,\n  handleSuccessParams,\n  UploadTriggerUploadText,\n  ErrorContext,\n  ResponseType,\n} from './types';\n\nexport interface BeforeUploadExtra {\n  /** 图片文件大小限制 */\n  sizeLimit?: number | SizeLimitObj;\n  /** 上传文件之前的钩子，参数为上传的文件，返回值决定是否上传 */\n  beforeUpload?: (file: UploadFile) => boolean | Promise<boolean>;\n}\n\nexport type BeforeUploadPromiseList = [Promise<SizeLimitObj>, undefined | Promise<boolean>];\n\nexport function handleBeforeUpload(file: UploadFile, params: BeforeUploadExtra): Promise<[SizeLimitObj, boolean]> {\n  const { sizeLimit, beforeUpload } = params;\n  // 文件大小校验\n  const sizePromise = new Promise<SizeLimitObj>((resolve) => {\n    let result: SizeLimitObj = null;\n    if (sizeLimit) {\n      const sizeLimitObj: SizeLimitObj = isNumber(sizeLimit) ? { size: sizeLimit, unit: 'KB' } : sizeLimit;\n      const limit = isOverSizeLimit(file.size, sizeLimitObj.size, sizeLimitObj.unit);\n      if (limit) {\n        result = sizeLimitObj;\n      }\n    }\n    resolve(result);\n  });\n\n  // 自定义校验\n  const promiseList: BeforeUploadPromiseList = [sizePromise, undefined];\n  if (isFunction(beforeUpload)) {\n    const r = beforeUpload(file);\n    const p =\n      r instanceof Promise\n        ? r\n        : new Promise<boolean>((resolve) => {\n            resolve(r);\n          });\n    promiseList[1] = p;\n  }\n\n  // 同时进行文件大小校验和自定义校验函数\n  return new Promise((resolve) => {\n    Promise.all(promiseList).then((r) => {\n      resolve(r);\n    });\n  });\n}\n\nexport interface OnErrorParams extends ErrorContext {\n  formatResponse?: HandleUploadParams['formatResponse'];\n}\n\nexport function handleError(options: OnErrorParams) {\n  const { event, files, response, XMLHttpRequest, formatResponse } = options;\n  let res = response;\n  if (isFunction(formatResponse)) {\n    res = formatResponse(response, { file: files[0], currentFiles: files });\n  }\n  files.forEach((file) => {\n    file.status = 'fail';\n    file.response = res;\n  });\n  return { response: res, event, files, XMLHttpRequest };\n}\n\nexport function handleSuccess(params: handleSuccessParams) {\n  const { event, files, response, XMLHttpRequest } = params;\n  if (files?.length <= 0) {\n    log.error('Upload', 'Empty File in Success Callback');\n  }\n  files.forEach((file) => {\n    file.percent = 100;\n    file.status = 'success';\n    delete file.response?.error;\n  });\n  const res = response;\n  files[0].url = res.url || files[0].url;\n  return { response: res, event, files, XMLHttpRequest };\n}\n\nexport type UploadRequestReturn = {\n  status?: 'fail' | 'success';\n  /** 上传失败的文件，需等待继续上传 */\n  failedFiles?: UploadFile[];\n  data?: SuccessContext;\n  /** 批量文件上传，一个文件一个请求的场景下，响应结果的列表 */\n  list?: UploadRequestReturn[];\n};\n\nexport function handleRequestMethodResponse(res: RequestMethodResponse) {\n  if (!res) {\n    log.error('Upload', '`requestMethodResponse` is required.');\n    return false;\n  }\n  if (!res.status) {\n    log.error('Upload', '`requestMethodResponse.status` is missing, which value only can be `success` or `fail`');\n    return false;\n  }\n  if (!['success', 'fail'].includes(res.status)) {\n    log.error(\n      'Upload',\n      \"`requestMethodResponse.status` must be `success` or `fail`, examples `{ status: 'success', response: { url: '' } }`\"\n    );\n    return false;\n  }\n  if (res.status === 'success' && (!res.response || (!res.response.url && !res.response.files))) {\n    log.warn(\n      'Upload',\n      '`requestMethodResponse.response.url` or `requestMethodResponse.response.files` is required if `status` is `success`'\n    );\n  }\n  return true;\n}\n\n/**\n * 一次上传请求的返回结果\n */\nexport function uploadOneRequest(params: HandleUploadParams): Promise<UploadRequestReturn> {\n  const { action, toUploadFiles, requestMethod } = params;\n  return new Promise<UploadRequestReturn>((resolve) => {\n    if (!action && !requestMethod) {\n      log.error('Upload', 'one of action and requestMethod must be exist.');\n      resolve({});\n      return;\n    }\n    if (!toUploadFiles || !toUploadFiles.length) {\n      log.warn('Upload', 'No files need to be uploaded');\n      resolve({});\n      return;\n    }\n    toUploadFiles.forEach((file) => {\n      file.status = 'progress';\n    });\n    // 自定义上传方法\n    if (requestMethod) {\n      requestMethod(params.multiple ? toUploadFiles : toUploadFiles[0]).then((res) => {\n        if (!handleRequestMethodResponse(res)) {\n          resolve({});\n          return;\n        }\n        let response = (res.response || {}) as ResponseType;\n        if (isFunction(params.formatResponse)) {\n          response = params.formatResponse(response, { file: toUploadFiles[0], currentFiles: toUploadFiles });\n        }\n        if (res.status === 'fail') {\n          response.error = res.error || response.error;\n        }\n        let resultFiles: UploadFile[] = [];\n        if (res.status === 'success' && response.files) {\n          // 一个请求上传并返回多个文件\n          resultFiles = response.files.map((file: UploadFile) => {\n            const fileInfo = toUploadFiles.find(\n              (toFile) => (file.name && toFile.name === file.name) || (file.raw && toFile.raw === file.raw)\n            );\n            return {\n              ...fileInfo,\n              ...file,\n              status: res.status,\n              response,\n            };\n          });\n        } else {\n          // 一个请求上传并返回一个文件\n          toUploadFiles.forEach((file) => {\n            file.status = res.status;\n            file.response = response;\n            file.url = response.url;\n            file.percent = res.status === 'success' ? 100 : 0;\n            // 如果上传请求返回结果没有上传日期，则使用电脑当前日期显示\n            file.uploadTime = response?.uploadTime || getCurrentDate();\n          });\n          resultFiles = toUploadFiles;\n        }\n        const result = {\n          response,\n          file: resultFiles[0],\n          files: resultFiles,\n        };\n        if (res.status === 'success') {\n          params.onResponseSuccess?.(result);\n        } else if (res.status === 'fail') {\n          params.onResponseError?.(result);\n        }\n        resolve({\n          status: res.status,\n          data: result,\n        });\n      });\n    } else {\n      const xhrReq = xhr({\n        action: params.action,\n        files: params.toUploadFiles,\n        useMockProgress: params.useMockProgress,\n        mockProgressDuration: params.mockProgressDuration,\n        onError: (p: ErrorContext) => {\n          const r = handleError({ ...p, formatResponse: params.formatResponse });\n          params.onResponseError?.(r);\n          resolve({ status: 'fail', data: r });\n        },\n        onProgress: params.onResponseProgress,\n        onSuccess: (p: SuccessContext) => {\n          const { formatResponse } = params;\n          let res = p.response;\n          if (isFunction(formatResponse)) {\n            res = formatResponse(p.response, {\n              file: p.file,\n              currentFiles: p.files,\n            });\n          }\n          if (res.error) {\n            const r = handleError({ ...p, response: res });\n            params.onResponseError?.(r);\n            resolve({ status: 'fail', data: r });\n          } else {\n            p.file.response = res;\n            p.files[0].response = res;\n            const r = handleSuccess({ ...p, response: res });\n            params.onResponseSuccess?.(r);\n            resolve({ status: 'success', data: r });\n          }\n        },\n        formatRequest: params.formatRequest,\n        data: params.data,\n        name: params.name,\n        headers: params.headers,\n        withCredentials: params.withCredentials,\n        method: params.method,\n      });\n      params.setXhrObject?.({\n        files: params.toUploadFiles,\n        xhrReq,\n      });\n    }\n  });\n}\n\nfunction updateUploadedFiles(uploadFiles: UploadFile[], resultFiles: UploadFile[]) {\n  const existFiles = uploadFiles.filter((t) => t.url);\n  const newFiles = existFiles;\n  for (let i = 0, len = resultFiles.length; i < len; i++) {\n    const file = resultFiles[i];\n    const index = uploadFiles.findIndex(\n      (item) => (item.raw && item.raw === file.raw) || (item.name && item.name === file.name)\n    );\n    const tmpFile = index >= 0 ? { ...uploadFiles[index], ...file } : file;\n    newFiles.push(tmpFile);\n  }\n  return newFiles;\n}\n\n/**\n * 可能单个文件上传，也可能批量文件一次性上传\n * 返回上传成功或上传失败的文件列表\n */\nexport function upload(params: HandleUploadParams): Promise<UploadRequestReturn> {\n  const { uploadAllFilesInOneRequest, toUploadFiles, uploadedFiles, isBatchUpload } = params;\n  // 一批文件上传，部分文件失败，重新上传失败的文件\n  const thisUploadFiles = toUploadFiles.filter((t) => !t.response || (t.response && !t.response.error));\n  return new Promise((resolve) => {\n    // 所有文件一次性上传\n    if (uploadAllFilesInOneRequest || !params.multiple) {\n      uploadOneRequest(params).then((r) => {\n        if (r.status === 'success') {\n          r.data.files =\n            isBatchUpload || !params.multiple ? r.data.files : updateUploadedFiles(uploadedFiles, r.data.files);\n        }\n        const failedFiles = r.status === 'fail' ? r.data.files : [];\n        resolve({ ...r, failedFiles });\n      });\n      return;\n    }\n    // 一个文件一个文件上传\n    const list = thisUploadFiles.map((file) => uploadOneRequest({ ...params, toUploadFiles: [file] }));\n    Promise.all(list).then((arr) => {\n      const files: UploadFile[] = [];\n      const failedFiles: UploadFile[] = [];\n      arr.forEach((one) => {\n        if (one.status === 'success') {\n          files.push(one.data.files[0]);\n        } else if (one.status === 'fail') {\n          failedFiles.push(one.data.files[0]);\n        }\n      });\n      const tFiles = params.autoUpload ? uploadedFiles.concat(files) : uploadedFiles;\n      const newFiles = isBatchUpload || !params.multiple ? files : tFiles;\n      resolve({\n        status: files.length ? 'success' : 'fail',\n        data: {\n          files: newFiles,\n        },\n        // 上传失败的文件，需等待继续上传\n        failedFiles,\n        list: arr,\n      });\n    });\n  });\n}\n\nexport function formatToUploadFile(\n  files: File[],\n  format: FileChangeParams['format'],\n  status: UploadFile['status'] = undefined,\n  percent = 0\n) {\n  return files.map((fileRaw: File) => {\n    let file: UploadFile = fileRaw;\n    if (isFunction(format)) {\n      file = format(fileRaw);\n    }\n    const uploadFile: UploadFile = {\n      raw: fileRaw,\n      lastModified: fileRaw.lastModified,\n      name: fileRaw.name,\n      size: fileRaw.size,\n      type: fileRaw.type,\n      percent,\n      status,\n      ...file,\n    };\n    return uploadFile;\n  });\n}\n\nexport function validateFile(params: FileChangeParams): Promise<FileChangeReturn> {\n  const { files, uploadValue, max, allowUploadDuplicateFile, capture = '' } = params;\n  return new Promise((resolve) => {\n    // 是否允许相同的文件名存在\n    let tmpFiles = files.filter((file) => {\n      // capture 明确指定后，一定是调用设备的媒体设备（比如：摄像头）捕获上传文件，该类文件跳过重复文件名校验\n      if (allowUploadDuplicateFile || !!capture) return true;\n\n      const sameNameFile = uploadValue.find((t) => t.name === file.name);\n      return !sameNameFile;\n    });\n\n    let hasSameNameFile = false;\n    if (tmpFiles.length < files.length) {\n      hasSameNameFile = true;\n    }\n    if (!tmpFiles.length) {\n      const tFiles = formatToUploadFile(files, params.format, params.autoUpload ? 'progress' : 'waiting');\n      resolve({ hasSameNameFile, file: tFiles?.[0], files: tFiles, validateResult: { type: 'FILTER_FILE_SAME_NAME' } });\n      return;\n    }\n    // 上传文件数量限制\n    let lengthOverLimit = false;\n    if (max && tmpFiles.length && !params.isBatchUpload) {\n      const tmpFilesLenToBeAdded = tmpFiles.length;\n      tmpFiles = tmpFiles.slice(0, max - uploadValue.length);\n      if (tmpFilesLenToBeAdded + uploadValue.length > max) {\n        lengthOverLimit = true;\n      }\n    }\n\n    // 格式化文件对象\n    const formattedFiles = formatToUploadFile(tmpFiles, params.format, params.autoUpload ? 'progress' : 'waiting');\n\n    // 全量文件，一波校验，整体上传 或 终止上传\n    let allFileValidatePromise;\n    if (params.beforeAllFilesUpload) {\n      const r = params.beforeAllFilesUpload?.(formattedFiles);\n      allFileValidatePromise =\n        r instanceof Promise\n          ? r\n          : new Promise((resolve) => {\n              resolve(r);\n            });\n    }\n\n    // 单文件合法性校验，一个文件校验不通过其他文件可继续上传\n    const promiseList = formattedFiles.map(\n      (file: UploadFile) =>\n        new Promise((resolve) => {\n          handleBeforeUpload(file, { beforeUpload: params.beforeUpload, sizeLimit: params.sizeLimit }).then(\n            ([sizeResult, customResult]) => {\n              if (sizeResult) {\n                resolve({ file, validateResult: { type: 'FILE_OVER_SIZE_LIMIT', extra: sizeResult } });\n              } else if (customResult === false) {\n                resolve({ file, validateResult: { type: 'CUSTOM_BEFORE_UPLOAD' } });\n              }\n              resolve({ file });\n            }\n          );\n        })\n    );\n    Promise.all([allFileValidatePromise].concat(promiseList)).then((results) => {\n      const [allFilesResult, ...others] = results;\n      // 如果 beforeAllFilesUpload 校验未通过\n      if (allFilesResult === false) {\n        resolve({\n          lengthOverLimit,\n          hasSameNameFile,\n          validateResult: { type: 'BEFORE_ALL_FILES_UPLOAD' },\n          files: formattedFiles,\n        });\n      } else {\n        resolve({\n          lengthOverLimit,\n          hasSameNameFile,\n          fileValidateList: others,\n          files: formattedFiles,\n        });\n      }\n    });\n  });\n}\n\nexport function getFilesAndErrors(\n  fileValidateList: FileChangeReturn[],\n  getError: (p: { [key: string]: any }) => string\n) {\n  const sizeLimitErrors: FileChangeReturn[] = [];\n  const beforeUploadErrorFiles: UploadFile[] = [];\n  const toFiles: UploadFile[] = [];\n  fileValidateList.forEach((oneFile) => {\n    if (oneFile.validateResult?.type === 'CUSTOM_BEFORE_UPLOAD') {\n      beforeUploadErrorFiles.push(oneFile.file);\n      return;\n    }\n    if (oneFile.validateResult?.type === 'FILE_OVER_SIZE_LIMIT') {\n      if (!oneFile.file.response) {\n        oneFile.file.response = {};\n      }\n      oneFile.file.response.error = oneFile.file.response.error || getError(oneFile.validateResult.extra);\n      sizeLimitErrors.push(oneFile);\n      return;\n    }\n    toFiles.push(oneFile.file);\n  });\n\n  return { sizeLimitErrors, beforeUploadErrorFiles, toFiles };\n}\n\n/**\n * 获取文件上传触发元素文本 在全局配置中的字段\n */\nexport function getTriggerTextField(p: {\n  status: 'success' | 'fail' | 'progress' | 'waiting';\n  multiple: boolean;\n  autoUpload: boolean;\n  isBatchUpload: boolean;\n}): keyof UploadTriggerUploadText {\n  if (p.isBatchUpload && p.status) return 'reupload';\n  if (p.status === 'fail') return 'reupload';\n  if (p.status === 'progress') return 'uploading';\n  if (p.status === 'success' || (!p.autoUpload && p.status === 'waiting')) {\n    return p.multiple ? 'continueUpload' : 'reupload';\n  }\n  return 'fileInput';\n}\n\nexport interface GetDisplayFilesParams {\n  multiple: boolean;\n  autoUpload: boolean;\n  isBatchUpload: boolean;\n  uploadValue: UploadFile[];\n  toUploadFiles: UploadFile[];\n}\n\n/**\n * 获取文件列表显示\n */\nexport function getDisplayFiles(params: GetDisplayFilesParams) {\n  const { multiple, uploadValue, toUploadFiles, autoUpload } = params;\n  const waitingUploadFiles = autoUpload ? toUploadFiles : toUploadFiles.filter((file) => file.status !== 'success');\n  if (multiple && !params.isBatchUpload) {\n    if (!autoUpload) return uploadValue;\n    return (waitingUploadFiles.length ? uploadValue.concat(waitingUploadFiles) : uploadValue) || [];\n  }\n  return (waitingUploadFiles.length ? waitingUploadFiles : uploadValue) || [];\n}\n"],"names":["_toArray","r","arrayWithHoles","iterableToArray","unsupportedIterableToArray","nonIterableRest","handleBeforeUpload","file","params","sizeLimit","beforeUpload","sizePromise","Promise","resolve","result","sizeLimitObj","isNumber","size","unit","limit","isOverSizeLimit","promiseList","isFunction","p","all","then","handleError","options","event","files","response","XMLHttpRequest","formatResponse","res","currentFiles","forEach","status","handleSuccess","length","log","error","_file$response","percent","url","handleRequestMethodResponse","includes","warn","uploadOneRequest","action","toUploadFiles","requestMethod","multiple","resultFiles","map","fileInfo","find","toFile","name","raw","_objectSpread","_response","uploadTime","getCurrentDate","_params$onResponseSuc","onResponseSuccess","call","_params$onResponseErr","onResponseError","data","_params$setXhrObject","xhrReq","xhr","useMockProgress","mockProgressDuration","onError","_params$onResponseErr2","onProgress","onResponseProgress","onSuccess","_params$onResponseErr3","_params$onResponseSuc2","formatRequest","headers","withCredentials","method","setXhrObject","updateUploadedFiles","uploadFiles","existFiles","filter","t","newFiles","_loop","i","index","findIndex","item","tmpFile","push","len","upload","uploadAllFilesInOneRequest","uploadedFiles","isBatchUpload","thisUploadFiles","failedFiles","list","arr","one","tFiles","autoUpload","concat","formatToUploadFile","format","arguments","undefined","fileRaw","uploadFile","lastModified","type","validateFile","uploadValue","max","allowUploadDuplicateFile","_params$capture","capture","tmpFiles","sameNameFile","hasSameNameFile","validateResult","lengthOverLimit","tmpFilesLenToBeAdded","slice","formattedFiles","allFileValidatePromise","beforeAllFilesUpload","_params$beforeAllFile","_ref","_ref2","_slicedToArray","sizeResult","customResult","extra","results","_results","allFilesResult","others","_arrayLikeToArray","fileValidateList","getFilesAndErrors","getError","sizeLimitErrors","beforeUploadErrorFiles","toFiles","oneFile","_oneFile$validateResu","_oneFile$validateResu2","getTriggerTextField","getDisplayFiles","waitingUploadFiles"],"mappings":";;;;;;;;;;;;;;;;AAIA,SAASA,QAAQA,CAACC,CAAC,EAAE;AACnB,EAAA,OAAOC,eAAc,CAACD,CAAC,CAAC,IAAIE,gBAAe,CAACF,CAAC,CAAC,IAAIG,2BAA0B,CAACH,CAAC,CAAC,IAAII,gBAAe,EAAE,CAAA;AACtG;;;;;ACsBgB,SAAAC,kBAAAA,CAAmBC,MAAkBC,MAA6D,EAAA;AAC1G,EAAA,IAAEC,SAAW,GAAiBD,MAAA,CAA5BC,SAAW;IAAAC,YAAA,GAAiBF,MAAA,CAAjBE,YAAA,CAAA;AAEnB,EAAA,IAAMC,WAAc,GAAA,IAAIC,OAAsB,CAAA,UAACC,OAAY,EAAA;IACzD,IAAIC,MAAuB,GAAA,IAAA,CAAA;AAC3B,IAAA,IAAIL,SAAW,EAAA;AACP,MAAA,IAAAM,YAAA,GAA6BC,SAASP,SAAS,CAAA,GAAI;AAAEQ,QAAAA,IAAM,EAAAR,SAAA;AAAWS,QAAAA,IAAM,EAAA,IAAA;AAAK,OAAI,GAAAT,SAAA,CAAA;AAC3F,MAAA,IAAMU,QAAQC,eAAgB,CAAAb,IAAA,CAAKU,MAAMF,YAAa,CAAAE,IAAA,EAAMF,aAAaG,IAAI,CAAA,CAAA;AAC7E,MAAA,IAAIC,KAAO,EAAA;AACAL,QAAAA,MAAA,GAAAC,YAAA,CAAA;AACX,OAAA;AACF,KAAA;IACAF,OAAA,CAAQC,MAAM,CAAA,CAAA;AAChB,GAAC,CAAA,CAAA;AAGK,EAAA,IAAAO,WAAA,GAAuC,CAACV,WAAA,EAAa,KAAS,CAAA,CAAA,CAAA;AAChE,EAAA,IAAAW,UAAA,CAAWZ,YAAY,CAAG,EAAA;AACtB,IAAA,IAAAT,CAAA,GAAIS,aAAaH,IAAI,CAAA,CAAA;AAC3B,IAAA,IAAMgB,IACJtB,CAAa,YAAAW,OAAA,GACTX,IACA,IAAIW,OAAA,CAAiB,UAACC,OAAY,EAAA;MAChCA,OAAA,CAAQZ,CAAC,CAAA,CAAA;AACX,KAAC,CAAA,CAAA;AACPoB,IAAAA,WAAA,CAAY,CAAK,CAAA,GAAAE,CAAA,CAAA;AACnB,GAAA;AAGO,EAAA,OAAA,IAAIX,OAAQ,CAAA,UAACC,OAAY,EAAA;IAC9BD,OAAA,CAAQY,GAAI,CAAAH,WAAW,CAAE,CAAAI,IAAA,CAAK,UAACxB,CAAM,EAAA;MACnCY,OAAA,CAAQZ,CAAC,CAAA,CAAA;AACX,KAAC,CAAA,CAAA;AACH,GAAC,CAAA,CAAA;AACH,CAAA;AAMO,SAASyB,YAAYC,OAAwB,EAAA;AAClD,EAAA,IAAQC,KAAO,GAAoDD,OAAA,CAA3DC,KAAO;IAAAC,KAAA,GAAoDF,OAAA,CAApDE,KAAA;IAAOC,QAAU,GAAmCH,OAAA,CAA7CG,QAAU;IAAAC,cAAA,GAAmCJ,OAAA,CAAnCI,cAAA;IAAgBC,iBAAmBL,OAAA,CAAnBK;EAChD,IAAIC,GAAM,GAAAH,QAAA,CAAA;AACN,EAAA,IAAAR,UAAA,CAAWU,cAAc,CAAG,EAAA;AACxBC,IAAAA,GAAA,GAAAD,cAAA,CAAeF,UAAU;AAAEvB,MAAAA,IAAA,EAAMsB,MAAM,CAAI,CAAA;AAAAK,MAAAA,YAAA,EAAcL,KAAAA;AAAM,KAAC,CAAA,CAAA;AACxE,GAAA;AACMA,EAAAA,KAAA,CAAAM,OAAA,CAAQ,UAAC5B,IAAS,EAAA;IACtBA,IAAA,CAAK6B,MAAS,GAAA,MAAA,CAAA;IACd7B,IAAA,CAAKuB,QAAW,GAAAG,GAAA,CAAA;AAClB,GAAC,CAAA,CAAA;EACD,OAAO;AAAEH,IAAAA,QAAA,EAAUG,GAAK;AAAAL,IAAAA,KAAA,EAAAA,KAAA;AAAOC,IAAAA,OAAAA;AAAOE,IAAAA,cAAe,EAAfA,cAAAA;GAAe,CAAA;AACvD,CAAA;AAEO,SAASM,cAAc7B,MAA6B,EAAA;AACzD,EAAA,IAAQoB,KAAA,GAA2CpB,MAAA,CAA3CoB,KAAA;IAAOC,KAAO,GAA6BrB,MAAA,CAApCqB,KAAO;IAAAC,QAAA,GAA6BtB,MAAA,CAA7BsB,QAAA;IAAUC,iBAAmBvB,MAAA,CAAnBuB;EAC5B,IAAA,CAAAF,KAAA,KAAA,IAAA,IAAAA,KAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAAA,KAAA,CAAOS,WAAU,CAAG,EAAA;AAClBC,IAAAA,GAAA,CAAAC,KAAA,CAAM,UAAU,gCAAgC,CAAA,CAAA;AACtD,GAAA;AACMX,EAAAA,KAAA,CAAAM,OAAA,CAAQ,UAAC5B,IAAS,EAAA;AAAA,IAAA,IAAAkC,cAAA,CAAA;IACtBlC,IAAA,CAAKmC,OAAU,GAAA,GAAA,CAAA;IACfnC,IAAA,CAAK6B,MAAS,GAAA,SAAA,CAAA;IACd,CAAAK,cAAA,GAAOlC,KAAKuB,QAAU,MAAAW,IAAAA,IAAAA,cAAA,KAAtB,KAAA,CAAA,IAAA,OAAOA,cAAA,CAAeD,KAAA,CAAA;AACxB,GAAC,CAAA,CAAA;EACD,IAAMP,GAAM,GAAAH,QAAA,CAAA;AACZD,EAAAA,KAAA,CAAM,CAAG,CAAA,CAAAc,GAAA,GAAMV,GAAI,CAAAU,GAAA,IAAOd,MAAM,CAAG,CAAA,CAAAc,GAAA,CAAA;EACnC,OAAO;AAAEb,IAAAA,QAAA,EAAUG,GAAK;AAAAL,IAAAA,KAAA,EAAAA,KAAA;AAAOC,IAAAA,OAAAA;AAAOE,IAAAA,cAAe,EAAfA,cAAAA;GAAe,CAAA;AACvD,CAAA;AAWO,SAASa,4BAA4BX,GAA4B,EAAA;EACtE,IAAI,CAACA,GAAK,EAAA;AACJM,IAAAA,GAAA,CAAAC,KAAA,CAAM,UAAU,sCAAsC,CAAA,CAAA;AACnD,IAAA,OAAA,KAAA,CAAA;AACT,GAAA;AACI,EAAA,IAAA,CAACP,IAAIG,MAAQ,EAAA;AACXG,IAAAA,GAAA,CAAAC,KAAA,CAAM,UAAU,wFAAwF,CAAA,CAAA;AACrG,IAAA,OAAA,KAAA,CAAA;AACT,GAAA;AACI,EAAA,IAAA,CAAC,CAAC,SAAW,EAAA,MAAM,EAAEK,QAAS,CAAAZ,GAAA,CAAIG,MAAM,CAAG,EAAA;AACzCG,IAAAA,GAAA,CAAAC,KAAA,CACF,QAAA,EACA,qHACF,CAAA,CAAA;AACO,IAAA,OAAA,KAAA,CAAA;AACT,GAAA;EACA,IAAIP,GAAI,CAAAG,MAAA,KAAW,SAAc,KAAA,CAACH,GAAI,CAAAH,QAAA,IAAa,CAACG,GAAA,CAAIH,QAAS,CAAAa,GAAA,IAAO,CAACV,GAAA,CAAIH,SAASD,KAAS,CAAA,EAAA;AACzFU,IAAAA,GAAA,CAAAO,IAAA,CACF,QAAA,EACA,qHACF,CAAA,CAAA;AACF,GAAA;AACO,EAAA,OAAA,IAAA,CAAA;AACT,CAAA;AAKO,SAASC,iBAAiBvC,MAA0D,EAAA;AACzF,EAAA,IAAQwC,MAAA,GAAyCxC,MAAA,CAAzCwC,MAAA;IAAQC,aAAe,GAAkBzC,MAAA,CAAjCyC,aAAe;IAAAC,aAAA,GAAkB1C,MAAA,CAAlB0C,aAAA,CAAA;AACxB,EAAA,OAAA,IAAItC,OAA6B,CAAA,UAACC,OAAY,EAAA;AAC/C,IAAA,IAAA,CAACmC,MAAU,IAAA,CAACE,aAAe,EAAA;AACzBX,MAAAA,GAAA,CAAAC,KAAA,CAAM,UAAU,gDAAgD,CAAA,CAAA;MACpE3B,OAAA,CAAQ,EAAE,CAAA,CAAA;AACV,MAAA,OAAA;AACF,KAAA;AACA,IAAA,IAAI,CAACoC,aAAA,IAAiB,CAACA,aAAA,CAAcX,MAAQ,EAAA;AACvCC,MAAAA,GAAA,CAAAO,IAAA,CAAK,UAAU,8BAA8B,CAAA,CAAA;MACjDjC,OAAA,CAAQ,EAAE,CAAA,CAAA;AACV,MAAA,OAAA;AACF,KAAA;AACcoC,IAAAA,aAAA,CAAAd,OAAA,CAAQ,UAAC5B,IAAS,EAAA;MAC9BA,IAAA,CAAK6B,MAAS,GAAA,UAAA,CAAA;AAChB,KAAC,CAAA,CAAA;AAED,IAAA,IAAIc,aAAe,EAAA;AACHA,MAAAA,aAAA,CAAA1C,MAAA,CAAO2C,WAAWF,aAAgB,GAAAA,aAAA,CAAc,EAAE,CAAE,CAAAxB,IAAA,CAAK,UAACQ,GAAQ,EAAA;AAC1E,QAAA,IAAA,CAACW,2BAA4B,CAAAX,GAAG,CAAG,EAAA;UACrCpB,OAAA,CAAQ,EAAE,CAAA,CAAA;AACV,UAAA,OAAA;AACF,SAAA;AACI,QAAA,IAAAiB,QAAA,GAAYG,GAAI,CAAAH,QAAA,IAAY,EAAC,CAAA;AAC7B,QAAA,IAAAR,UAAA,CAAWd,MAAO,CAAAwB,cAAc,CAAG,EAAA;AAC1BF,UAAAA,QAAA,GAAAtB,MAAA,CAAOwB,eAAeF,QAAU,EAAA;AAAEvB,YAAAA,MAAM0C,aAAc,CAAA,CAAA,CAAA;AAAIf,YAAAA,YAAc,EAAAe,aAAAA;AAAc,WAAC,CAAA,CAAA;AACpG,SAAA;AACI,QAAA,IAAAhB,GAAA,CAAIG,WAAW,MAAQ,EAAA;UAChBN,QAAA,CAAAU,KAAA,GAAQP,GAAI,CAAAO,KAAA,IAASV,QAAS,CAAAU,KAAA,CAAA;AACzC,SAAA;QACA,IAAIY,cAA4B,EAAC,CAAA;QACjC,IAAInB,GAAI,CAAAG,MAAA,KAAW,SAAa,IAAAN,QAAA,CAASD,KAAO,EAAA;UAE9CuB,WAAA,GAActB,QAAS,CAAAD,KAAA,CAAMwB,GAAI,CAAA,UAAC9C,IAAqB,EAAA;AACrD,YAAA,IAAM+C,WAAWL,aAAc,CAAAM,IAAA,CAC7B,UAACC,MAAA,EAAA;cAAA,OAAYjD,IAAK,CAAAkD,IAAA,IAAQD,MAAO,CAAAC,IAAA,KAASlD,IAAK,CAAAkD,IAAA,IAAUlD,IAAK,CAAAmD,GAAA,IAAOF,MAAO,CAAAE,GAAA,KAAQnD,IAAK,CAAAmD,GAAA,CAAA;AAAA,aAC3F,CAAA,CAAA;YACO,OAAAC,aAAA,CAAAA,aAAA,CAAAA,aAAA,CACFL,EAAAA,EAAAA,QAAA,GACA/C,IAAA,CAAA,EAAA,EAAA,EAAA;cACH6B,QAAQH,GAAI,CAAAG,MAAA;AACZN,cAAAA,QAAA,EAAAA,QAAAA;AAAA,aAAA,CAAA,CAAA;AAEJ,WAAC,CAAA,CAAA;AACH,SAAO,MAAA;AAESmB,UAAAA,aAAA,CAAAd,OAAA,CAAQ,UAAC5B,IAAS,EAAA;AAAA,YAAA,IAAAqD,SAAA,CAAA;AAC9BrD,YAAAA,IAAA,CAAK6B,SAASH,GAAI,CAAAG,MAAA,CAAA;YAClB7B,IAAA,CAAKuB,QAAW,GAAAA,QAAA,CAAA;AAChBvB,YAAAA,IAAA,CAAKoC,MAAMb,QAAS,CAAAa,GAAA,CAAA;YACpBpC,IAAA,CAAKmC,OAAU,GAAAT,GAAA,CAAIG,MAAW,KAAA,SAAA,GAAY,GAAM,GAAA,CAAA,CAAA;AAE3C7B,YAAAA,IAAA,CAAAsD,UAAA,GAAa,CAAAD,CAAAA,SAAA,GAAA9B,QAAU,MAAA,IAAA,IAAA8B,SAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAVA,SAAA,CAAUC,UAAA,KAAcC,cAAe,EAAA,CAAA;AAC3D,WAAC,CAAA,CAAA;AACaV,UAAAA,WAAA,GAAAH,aAAA,CAAA;AAChB,SAAA;AACA,QAAA,IAAMnC,MAAS,GAAA;AACbgB,UAAAA,QAAA,EAAAA,QAAA;AACAvB,UAAAA,MAAM6C,WAAY,CAAA,CAAA,CAAA;AAClBvB,UAAAA,KAAO,EAAAuB,WAAAA;SACT,CAAA;AACI,QAAA,IAAAnB,GAAA,CAAIG,WAAW,SAAW,EAAA;AAAA,UAAA,IAAA2B,qBAAA,CAAA;AAC5B,UAAA,CAAAA,qBAAA,GAAAvD,MAAA,CAAOwD,yDAAPD,KAAAA,CAAAA,IAAAA,qBAAA,CAAAE,IAAA,CAAAzD,MAAA,EAA2BM,MAAM,CAAA,CAAA;AACnC,SAAA,MAAA,IAAWmB,GAAI,CAAAG,MAAA,KAAW,MAAQ,EAAA;AAAA,UAAA,IAAA8B,qBAAA,CAAA;AAChC,UAAA,CAAAA,qBAAA,GAAA1D,MAAA,CAAO2D,uDAAPD,KAAAA,CAAAA,IAAAA,qBAAA,CAAAD,IAAA,CAAAzD,MAAA,EAAyBM,MAAM,CAAA,CAAA;AACjC,SAAA;AACQD,QAAAA,OAAA,CAAA;UACNuB,QAAQH,GAAI,CAAAG,MAAA;AACZgC,UAAAA,IAAM,EAAAtD,MAAAA;AACR,SAAC,CAAA,CAAA;AACH,OAAC,CAAA,CAAA;AACH,KAAO,MAAA;AAAA,MAAA,IAAAuD,oBAAA,CAAA;MACL,IAAMC,SAASC,GAAI,CAAA;QACjBvB,QAAQxC,MAAO,CAAAwC,MAAA;QACfnB,OAAOrB,MAAO,CAAAyC,aAAA;QACduB,iBAAiBhE,MAAO,CAAAgE,eAAA;QACxBC,sBAAsBjE,MAAO,CAAAiE,oBAAA;AAC7BC,QAAAA,OAAA,EAAS,SAATA,OAAAA,CAAUnD,CAAoB,EAAA;AAAA,UAAA,IAAAoD,sBAAA,CAAA;UACtB,IAAA1E,CAAA,GAAIyB,4CAAiBH;YAAGS,cAAgB,EAAAxB,MAAA,CAAOwB,cAAAA;YAAgB,CAAA,CAAA;AACrE,UAAA,CAAA2C,sBAAA,GAAAnE,MAAA,CAAO2D,wDAAPQ,KAAAA,CAAAA,IAAAA,sBAAA,CAAAV,IAAA,CAAAzD,MAAA,EAAyBP,CAAC,CAAA,CAAA;AAC1BY,UAAAA,OAAA,CAAQ;AAAEuB,YAAAA,MAAA,EAAQ,MAAQ;AAAAgC,YAAAA,IAAA,EAAMnE,CAAAA;AAAE,WAAC,CAAA,CAAA;SACrC;QACA2E,YAAYpE,MAAO,CAAAqE,kBAAA;AACnBC,QAAAA,SAAA,EAAW,SAAXA,SAAAA,CAAYvD,CAAsB,EAAA;AAC1B,UAAA,IAAES,iBAAmBxB,MAAA,CAAnBwB;AACR,UAAA,IAAIC,MAAMV,CAAE,CAAAO,QAAA,CAAA;AACR,UAAA,IAAAR,UAAA,CAAWU,cAAc,CAAG,EAAA;AACxBC,YAAAA,GAAA,GAAAD,cAAA,CAAeT,EAAEO,QAAU,EAAA;cAC/BvB,MAAMgB,CAAE,CAAAhB,IAAA;cACR2B,cAAcX,CAAE,CAAAM,KAAAA;AAClB,aAAC,CAAA,CAAA;AACH,WAAA;UACA,IAAII,IAAIO,KAAO,EAAA;AAAA,YAAA,IAAAuC,sBAAA,CAAA;YACb,IAAM9E,IAAIyB,WAAY,CAAAiC,aAAA,CAAAA,aAAA,KAAKpC,CAAG,CAAA,EAAA,EAAA,EAAA;AAAAO,cAAAA,QAAA,EAAUG,GAAAA;cAAK,CAAA,CAAA;AAC7C,YAAA,CAAA8C,sBAAA,GAAAvE,MAAA,CAAO2D,wDAAPY,KAAAA,CAAAA,IAAAA,sBAAA,CAAAd,IAAA,CAAAzD,MAAA,EAAyBP,CAAC,CAAA,CAAA;AAC1BY,YAAAA,OAAA,CAAQ;AAAEuB,cAAAA,MAAA,EAAQ,MAAQ;AAAAgC,cAAAA,IAAA,EAAMnE,CAAAA;AAAE,aAAC,CAAA,CAAA;AACrC,WAAO,MAAA;AAAA,YAAA,IAAA+E,sBAAA,CAAA;AACLzD,YAAAA,CAAA,CAAEhB,KAAKuB,QAAW,GAAAG,GAAA,CAAA;YAChBV,CAAA,CAAAM,KAAA,CAAM,GAAGC,QAAW,GAAAG,GAAA,CAAA;YACtB,IAAMhC,KAAIoC,aAAc,CAAAsB,aAAA,CAAAA,aAAA,KAAKpC,CAAG,CAAA,EAAA,EAAA,EAAA;AAAAO,cAAAA,QAAA,EAAUG,GAAAA;cAAK,CAAA,CAAA;AAC/C,YAAA,CAAA+C,sBAAA,GAAAxE,MAAA,CAAOwD,0DAAPgB,KAAAA,CAAAA,IAAAA,sBAAA,CAAAf,IAAA,CAAAzD,MAAA,EAA2BP,EAAC,CAAA,CAAA;AAC5BY,YAAAA,OAAA,CAAQ;AAAEuB,cAAAA,MAAA,EAAQ,SAAW;AAAAgC,cAAAA,IAAA,EAAMnE,EAAAA;AAAE,aAAC,CAAA,CAAA;AACxC,WAAA;SACF;QACAgF,eAAezE,MAAO,CAAAyE,aAAA;QACtBb,MAAM5D,MAAO,CAAA4D,IAAA;QACbX,MAAMjD,MAAO,CAAAiD,IAAA;QACbyB,SAAS1E,MAAO,CAAA0E,OAAA;QAChBC,iBAAiB3E,MAAO,CAAA2E,eAAA;QACxBC,QAAQ5E,MAAO,CAAA4E,MAAAA;AACjB,OAAC,CAAA,CAAA;AACD,MAAA,CAAAf,oBAAA,GAAA7D,MAAA,CAAO6E,YAAe,MAAA,IAAA,IAAAhB,oBAAA,KAAA,KAAA,CAAA,IAAtBA,oBAAA,CAAAJ,IAAA,CAAAzD,MAAA,EAAsB;QACpBqB,OAAOrB,MAAO,CAAAyC,aAAA;AACdqB,QAAAA,MAAA,EAAAA,MAAAA;AACF,OAAC,CAAA,CAAA;AACH,KAAA;AACF,GAAC,CAAA,CAAA;AACH,CAAA;AAEA,SAASgB,mBAAAA,CAAoBC,aAA2BnC,WAA2B,EAAA;AACjF,EAAA,IAAMoC,aAAaD,WAAY,CAAAE,MAAA,CAAO,UAACC,CAAA,EAAA;IAAA,OAAMA,EAAE/C,GAAG,CAAA;GAAA,CAAA,CAAA;EAClD,IAAMgD,QAAW,GAAAH,UAAA,CAAA;EAAA,IAAAI,KAAA,GAAAA,SAAAA,KAAAA,GACuC;AACtD,IAAA,IAAMrF,OAAO6C,WAAY,CAAAyC,CAAA,CAAA,CAAA;AACzB,IAAA,IAAMC,QAAQP,WAAY,CAAAQ,SAAA,CACxB,UAACC,IAAA,EAAA;MAAA,OAAUA,IAAK,CAAAtC,GAAA,IAAOsC,IAAK,CAAAtC,GAAA,KAAQnD,IAAK,CAAAmD,GAAA,IAASsC,IAAK,CAAAvC,IAAA,IAAQuC,IAAK,CAAAvC,IAAA,KAASlD,IAAK,CAAAkD,IAAA,CAAA;AAAA,KACpF,CAAA,CAAA;AACM,IAAA,IAAAwC,OAAA,GAAUH,SAAS,CAAI,GAAAnC,aAAA,CAAAA,aAAA,CAAA,EAAA,EAAK4B,WAAY,CAAAO,KAAA,CAAA,CAAWvF,EAAAA,IAAA,IAASA,IAAA,CAAA;AAClEoF,IAAAA,QAAA,CAASO,KAAKD,OAAO,CAAA,CAAA;GACvB,CAAA;AAPA,EAAA,KAAA,IAASJ,IAAI,CAAG,EAAAM,GAAA,GAAM/C,YAAYd,MAAQ,EAAAuD,CAAA,GAAIM,KAAKN,CAAK,EAAA,EAAA;IAAAD,KAAA,EAAA,CAAA;AAAA,GAAA;AAQjD,EAAA,OAAAD,QAAA,CAAA;AACT,CAAA;AAMO,SAASS,OAAO5F,MAA0D,EAAA;AAC/E,EAAA,IAAQ6F,0BAAA,GAA4E7F,MAAA,CAA5E6F,0BAAA;IAA4BpD,aAAe,GAAiCzC,MAAA,CAAhDyC,aAAe;IAAAqD,aAAA,GAAiC9F,MAAA,CAAjC8F,aAAA;IAAeC,gBAAkB/F,MAAA,CAAlB+F;AAElE,EAAA,IAAMC,eAAkB,GAAAvD,aAAA,CAAcwC,MAAO,CAAA,UAACC,CAAM,EAAA;AAAA,IAAA,OAAA,CAACA,CAAE,CAAA5D,QAAA,IAAa4D,CAAE,CAAA5D,QAAA,IAAY,CAAC4D,CAAA,CAAE5D,SAASU,KAAM,CAAA;GAAA,CAAA,CAAA;AAC7F,EAAA,OAAA,IAAI5B,OAAQ,CAAA,UAACC,OAAY,EAAA;AAE1B,IAAA,IAAAwF,0BAAA,IAA8B,CAAC7F,MAAA,CAAO2C,QAAU,EAAA;MAClDJ,gBAAA,CAAiBvC,MAAM,CAAA,CAAEiB,IAAK,CAAA,UAACxB,CAAM,EAAA;AAC/B,QAAA,IAAAA,CAAA,CAAEmC,WAAW,SAAW,EAAA;UAC1BnC,CAAA,CAAEmE,IAAK,CAAAvC,KAAA,GACL0E,aAAiB,IAAA,CAAC/F,MAAO,CAAA2C,QAAA,GAAWlD,CAAE,CAAAmE,IAAA,CAAKvC,KAAQ,GAAAyD,mBAAA,CAAoBgB,aAAe,EAAArG,CAAA,CAAEmE,KAAKvC,KAAK,CAAA,CAAA;AACtG,SAAA;AACA,QAAA,IAAM4E,cAAcxG,CAAE,CAAAmC,MAAA,KAAW,SAASnC,CAAE,CAAAmE,IAAA,CAAKvC,QAAQ,EAAC,CAAA;AAC1DhB,QAAAA,OAAA,CAAA8C,aAAA,CAAAA,aAAA,KAAa1D,CAAG,CAAA,EAAA,EAAA,EAAA;AAAAwG,UAAAA,WAAA,EAAAA,WAAAA;AAAA,SAAA,CAAa,CAAA,CAAA;AAC/B,OAAC,CAAA,CAAA;AACD,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAMC,IAAO,GAAAF,eAAA,CAAgBnD,GAAI,CAAA,UAAC9C;aAASwC,gBAAiB,CAAAY,aAAA,CAAAA,aAAA,KAAKnD,MAAA,CAAA,EAAA,EAAA,EAAA;QAAQyC,aAAe,EAAA,CAAC1C,IAAI,CAAA;AAAA,OAAA,CAAG,CAAC,CAAA;KAAA,CAAA,CAAA;IACjGK,OAAA,CAAQY,GAAI,CAAAkF,IAAI,CAAE,CAAAjF,IAAA,CAAK,UAACkF,GAAQ,EAAA;MAC9B,IAAM9E,QAAsB,EAAC,CAAA;MAC7B,IAAM4E,cAA4B,EAAC,CAAA;AAC/BE,MAAAA,GAAA,CAAAxE,OAAA,CAAQ,UAACyE,GAAQ,EAAA;AACf,QAAA,IAAAA,GAAA,CAAIxE,WAAW,SAAW,EAAA;UAC5BP,KAAA,CAAMqE,IAAK,CAAAU,GAAA,CAAIxC,IAAK,CAAAvC,KAAA,CAAM,CAAE,CAAA,CAAA,CAAA;AAC9B,SAAA,MAAA,IAAW+E,GAAI,CAAAxE,MAAA,KAAW,MAAQ,EAAA;UAChCqE,WAAA,CAAYP,IAAK,CAAAU,GAAA,CAAIxC,IAAK,CAAAvC,KAAA,CAAM,CAAE,CAAA,CAAA,CAAA;AACpC,SAAA;AACF,OAAC,CAAA,CAAA;AACD,MAAA,IAAMgF,SAASrG,MAAO,CAAAsG,UAAA,GAAaR,aAAc,CAAAS,MAAA,CAAOlF,KAAK,CAAI,GAAAyE,aAAA,CAAA;MACjE,IAAMX,QAAW,GAAAY,aAAA,IAAiB,CAAC/F,MAAA,CAAO2C,WAAWtB,KAAQ,GAAAgF,MAAA,CAAA;AACrDhG,MAAAA,OAAA,CAAA;AACNuB,QAAAA,MAAA,EAAQP,KAAM,CAAAS,MAAA,GAAS,SAAY,GAAA,MAAA;AACnC8B,QAAAA,IAAM,EAAA;AACJvC,UAAAA,KAAO,EAAA8D,QAAAA;SACT;AAEAc,QAAAA,WAAA,EAAAA,WAAA;AACAC,QAAAA,IAAM,EAAAC,GAAAA;AACR,OAAC,CAAA,CAAA;AACH,KAAC,CAAA,CAAA;AACH,GAAC,CAAA,CAAA;AACH,CAAA;AAEO,SAASK,mBACdnF,KACA,EAAAoF,MAAA,EAGA;AAAA,EAAA,IAFA7E,MAA+B,GAAA8E,SAAA,CAAA5E,MAAA,GAAA,CAAA,IAAA4E,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA,CAAA;AAAA,EAAA,IAC/BxE,8EAAU,CACV,CAAA;AACO,EAAA,OAAAb,KAAA,CAAMwB,GAAI,CAAA,UAAC+D,OAAkB,EAAA;IAClC,IAAI7G,IAAmB,GAAA6G,OAAA,CAAA;AACnB,IAAA,IAAA9F,UAAA,CAAW2F,MAAM,CAAG,EAAA;AACtB1G,MAAAA,IAAA,GAAO0G,OAAOG,OAAO,CAAA,CAAA;AACvB,KAAA;IACA,IAAMC,UAAyB,GAAA1D,aAAA,CAAA;AAC7BD,MAAAA,GAAK,EAAA0D,OAAA;MACLE,cAAcF,OAAQ,CAAAE,YAAA;MACtB7D,MAAM2D,OAAQ,CAAA3D,IAAA;MACdxC,MAAMmG,OAAQ,CAAAnG,IAAA;MACdsG,MAAMH,OAAQ,CAAAG,IAAA;AACd7E,MAAAA,OAAA,EAAAA,OAAA;AACAN,MAAAA,MAAA,EAAAA,MAAAA;AAAA,KAAA,EACG7B,IAAA,CACL,CAAA;AACO,IAAA,OAAA8G,UAAA,CAAA;AACT,GAAC,CAAA,CAAA;AACH,CAAA;AAEO,SAASG,aAAahH,MAAqD,EAAA;AAChF,EAAA,IAAQqB,KAAO,GAA6DrB,MAAA,CAApEqB,KAAO;IAAA4F,WAAA,GAA6DjH,MAAA,CAA7DiH,WAAA;IAAaC,MAAgDlH,MAAA,CAAhDkH;IAAKC,wBAA0B,GAAiBnH,MAAA,CAA3CmH,wBAA0B;IAAAC,eAAA,GAAiBpH,MAAA,CAAjBqH,OAAA;AAAAA,IAAAA,OAAA,GAAAD,eAAA,KAAU,KAAA,CAAA,GAAA;AAC9D,EAAA,OAAA,IAAIhH,OAAQ,CAAA,UAACC,OAAY,EAAA;IAE9B,IAAIiH,QAAW,GAAAjG,KAAA,CAAM4D,MAAO,CAAA,UAAClF,IAAS,EAAA;AAEhC,MAAA,IAAAoH,wBAAA,IAA4B,CAAC,CAACE,OAAA,EAAgB,OAAA,IAAA,CAAA;AAE5C,MAAA,IAAAE,YAAA,GAAeN,YAAYlE,IAAK,CAAA,UAACmC;eAAMA,CAAE,CAAAjC,IAAA,KAASlD,KAAKkD,IAAI,CAAA;OAAA,CAAA,CAAA;AACjE,MAAA,OAAO,CAACsE,YAAA,CAAA;AACV,KAAC,CAAA,CAAA;IAED,IAAIC,eAAkB,GAAA,KAAA,CAAA;AAClB,IAAA,IAAAF,QAAA,CAASxF,MAAS,GAAAT,KAAA,CAAMS,MAAQ,EAAA;AAChB0F,MAAAA,eAAA,GAAA,IAAA,CAAA;AACpB,KAAA;AACI,IAAA,IAAA,CAACF,SAASxF,MAAQ,EAAA;AACd,MAAA,IAAAuE,MAAA,GAASG,mBAAmBnF,KAAO,EAAArB,MAAA,CAAOyG,QAAQzG,MAAO,CAAAsG,UAAA,GAAa,aAAa,SAAS,CAAA,CAAA;AAClGjG,MAAAA,OAAA,CAAQ;AAAEmH,QAAAA,eAAA,EAAAA,eAAA;QAAiBzH,IAAM,EAAAsG,MAAA,KAAAA,IAAAA,IAAAA,MAAA,uBAAAA,MAAA,CAAS,CAAI,CAAA;AAAAhF,QAAAA,KAAA,EAAOgF,MAAQ;AAAAoB,QAAAA,cAAA,EAAgB;AAAEV,UAAAA,IAAA,EAAM,uBAAA;AAAwB,SAAA;AAAE,OAAC,CAAA,CAAA;AAChH,MAAA,OAAA;AACF,KAAA;IAEA,IAAIW,eAAkB,GAAA,KAAA,CAAA;IACtB,IAAIR,GAAO,IAAAI,QAAA,CAASxF,MAAU,IAAA,CAAC9B,OAAO+F,aAAe,EAAA;AACnD,MAAA,IAAM4B,uBAAuBL,QAAS,CAAAxF,MAAA,CAAA;AACtCwF,MAAAA,QAAA,GAAWA,QAAS,CAAAM,KAAA,CAAM,CAAG,EAAAV,GAAA,GAAMD,YAAYnF,MAAM,CAAA,CAAA;AACjD,MAAA,IAAA6F,oBAAA,GAAuBV,WAAY,CAAAnF,MAAA,GAASoF,GAAK,EAAA;AACjCQ,QAAAA,eAAA,GAAA,IAAA,CAAA;AACpB,OAAA;AACF,KAAA;AAGM,IAAA,IAAAG,cAAA,GAAiBrB,mBAAmBc,QAAU,EAAAtH,MAAA,CAAOyG,QAAQzG,MAAO,CAAAsG,UAAA,GAAa,aAAa,SAAS,CAAA,CAAA;AAGzG,IAAA,IAAAwB,sBAAA,CAAA;IACJ,IAAI9H,OAAO+H,oBAAsB,EAAA;AAAA,MAAA,IAAAC,qBAAA,CAAA;AACzB,MAAA,IAAAvI,CAAA,GAAAuI,CAAAA,qBAAA,GAAIhI,MAAO,CAAA+H,oBAAA,MAAA,IAAA,IAAAC,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAPA,qBAAA,CAAAvE,IAAA,CAAAzD,MAAO,EAAuB6H,cAAc,CAAA,CAAA;AACtDC,MAAAA,sBAAA,GACErI,aAAaW,OACT,GAAAX,CAAA,GACA,IAAIW,OAAA,CAAQ,UAACC,QAAY,EAAA;QACvBA,SAAQZ,CAAC,CAAA,CAAA;AACX,OAAC,CAAA,CAAA;AACT,KAAA;AAGA,IAAA,IAAMoB,cAAcgH,cAAe,CAAAhF,GAAA,CACjC,UAAC9C,IAAA,EAAA;AAAA,MAAA,OACC,IAAIK,OAAA,CAAQ,UAACC,QAAY,EAAA;QACJP,kBAAA,CAAAC,IAAA,EAAM;UAAEG,YAAc,EAAAF,MAAA,CAAOE;UAAcD,SAAW,EAAAD,MAAA,CAAOC,SAAAA;AAAU,SAAC,CAAE,CAAAgB,IAAA,CAC3F,UAAAgH,IAAA,EAAgC;AAAA,UAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA,EAAA,CAAA,CAAA;AAA9BG,YAAAA,UAAY,GAAAF,KAAA,CAAA,CAAA,CAAA;AAAAG,YAAAA,YAAY,GAAAH,KAAA,CAAA,CAAA,CAAA,CAAA;AACxB,UAAA,IAAIE,UAAY,EAAA;AACd/H,YAAAA,QAAAA,CAAQ;AAAEN,cAAAA,IAAA,EAAAA,IAAA;AAAM0H,cAAAA,cAAgB,EAAA;AAAEV,gBAAAA,MAAM,sBAAwB;AAAAuB,gBAAAA,KAAA,EAAOF,UAAAA;AAAW,eAAA;AAAE,aAAC,CAAA,CAAA;AACvF,WAAA,MAAA,IAAWC,iBAAiB,KAAO,EAAA;AACjChI,YAAAA,QAAAA,CAAQ;AAAEN,cAAAA,IAAM,EAANA,IAAM;AAAA0H,cAAAA,cAAA,EAAgB;AAAEV,gBAAAA,IAAM,EAAA,sBAAA;AAAuB,eAAA;AAAE,aAAC,CAAA,CAAA;AACpE,WAAA;AACA1G,UAAAA,QAAAA,CAAQ;AAAEN,YAAAA,IAAA,EAAAA,IAAAA;AAAK,WAAC,CAAA,CAAA;AAClB,SACF,CAAA,CAAA;AACF,OAAC,CAAA,CAAA;AAAA,KACL,CAAA,CAAA;AACQK,IAAAA,OAAA,CAAAY,GAAA,CAAI,CAAC8G,sBAAsB,CAAE,CAAAvB,MAAA,CAAO1F,WAAW,CAAC,CAAA,CAAEI,IAAK,CAAA,UAACsH,OAAY,EAAA;AACpE,MAAA,IAAAC,QAAA,GAAAhJ,QAAA,CAA8B+I,OAAA,CAAA;AAA7BE,QAAAA,cAAmB,GAAAD,QAAA,CAAA,CAAA,CAAA;AAAAE,QAAAA,MAAM,GAAAC,iBAAA,CAAAH,QAAA,EAAAZ,KAAA,CAAA,CAAA,CAAA,CAAA;MAEhC,IAAIa,mBAAmB,KAAO,EAAA;AACpBpI,QAAAA,OAAA,CAAA;AACNqH,UAAAA,eAAA,EAAAA,eAAA;AACAF,UAAAA,eAAA,EAAAA,eAAA;AACAC,UAAAA,cAAA,EAAgB;AAAEV,YAAAA,IAAA,EAAM,yBAAA;WAA0B;AAClD1F,UAAAA,KAAO,EAAAwG,cAAAA;AACT,SAAC,CAAA,CAAA;AACH,OAAO,MAAA;AACGxH,QAAAA,OAAA,CAAA;AACNqH,UAAAA,eAAA,EAAAA,eAAA;AACAF,UAAAA,eAAA,EAAAA,eAAA;AACAoB,UAAAA,gBAAkB,EAAAF,MAAA;AAClBrH,UAAAA,KAAO,EAAAwG,cAAAA;AACT,SAAC,CAAA,CAAA;AACH,OAAA;AACF,KAAC,CAAA,CAAA;AACH,GAAC,CAAA,CAAA;AACH,CAAA;AAEgB,SAAAgB,iBAAAA,CACdD,kBACAE,QACA,EAAA;EACA,IAAMC,kBAAsC,EAAC,CAAA;EAC7C,IAAMC,yBAAuC,EAAC,CAAA;EAC9C,IAAMC,UAAwB,EAAC,CAAA;AACdL,EAAAA,gBAAA,CAAAjH,OAAA,CAAQ,UAACuH,OAAY,EAAA;IAAA,IAAAC,qBAAA,EAAAC,sBAAA,CAAA;AAChC,IAAA,IAAA,CAAAD,CAAAA,qBAAA,GAAAD,OAAA,CAAQzB,cAAgB,MAAA,IAAA,IAAA0B,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAxBA,qBAAA,CAAwBpC,IAAA,MAAS,sBAAwB,EAAA;AACpCiC,MAAAA,sBAAA,CAAAtD,IAAA,CAAKwD,QAAQnJ,IAAI,CAAA,CAAA;AACxC,MAAA,OAAA;AACF,KAAA;AACI,IAAA,IAAA,CAAAqJ,CAAAA,sBAAA,GAAAF,OAAA,CAAQzB,cAAgB,MAAA,IAAA,IAAA2B,sBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAxBA,sBAAA,CAAwBrC,IAAA,MAAS,sBAAwB,EAAA;AACvD,MAAA,IAAA,CAACmC,OAAQ,CAAAnJ,IAAA,CAAKuB,QAAU,EAAA;AAClB4H,QAAAA,OAAA,CAAAnJ,IAAA,CAAKuB,WAAW,EAAC,CAAA;AAC3B,OAAA;MACQ4H,OAAA,CAAAnJ,IAAA,CAAKuB,QAAS,CAAAU,KAAA,GAAQkH,OAAQ,CAAAnJ,IAAA,CAAKuB,SAASU,KAAS,IAAA8G,QAAA,CAASI,OAAQ,CAAAzB,cAAA,CAAea,KAAK,CAAA,CAAA;AAClGS,MAAAA,eAAA,CAAgBrD,KAAKwD,OAAO,CAAA,CAAA;AAC5B,MAAA,OAAA;AACF,KAAA;AACQD,IAAAA,OAAA,CAAAvD,IAAA,CAAKwD,QAAQnJ,IAAI,CAAA,CAAA;AAC3B,GAAC,CAAA,CAAA;EAEM,OAAA;AAAEgJ,IAAAA,eAAiB,EAAjBA,eAAiB;AAAAC,IAAAA,sBAAA,EAAAA,sBAAA;AAAwBC,IAAAA,OAAQ,EAARA,OAAAA;GAAQ,CAAA;AAC5D,CAAA;AAKO,SAASI,oBAAoBtI,CAKF,EAAA;EAC5B,IAAAA,CAAA,CAAEgF,iBAAiBhF,CAAE,CAAAa,MAAA,EAAe,OAAA,UAAA,CAAA;AACxC,EAAA,IAAIb,EAAEa,MAAW,KAAA,MAAA,EAAe,OAAA,UAAA,CAAA;AAChC,EAAA,IAAIb,EAAEa,MAAW,KAAA,UAAA,EAAmB,OAAA,WAAA,CAAA;AAChC,EAAA,IAAAb,CAAA,CAAEa,WAAW,SAAc,IAAA,CAACb,EAAEuF,UAAc,IAAAvF,CAAA,CAAEa,WAAW,SAAY,EAAA;AAChE,IAAA,OAAAb,CAAA,CAAE4B,WAAW,gBAAmB,GAAA,UAAA,CAAA;AACzC,GAAA;AACO,EAAA,OAAA,WAAA,CAAA;AACT,CAAA;AAaO,SAAS2G,gBAAgBtJ,MAA+B,EAAA;AAC7D,EAAA,IAAQ2C,QAAA,GAAqD3C,MAAA,CAArD2C,QAAA;IAAUsE,WAAa,GAA8BjH,MAAA,CAA3CiH,WAAa;IAAAxE,aAAA,GAA8BzC,MAAA,CAA9ByC,aAAA;IAAe6D,aAAetG,MAAA,CAAfsG;EACxC,IAAAiD,kBAAA,GAAqBjD,aAAa7D,aAAgB,GAAAA,aAAA,CAAcwC,OAAO,UAAClF,IAAA,EAAA;AAAA,IAAA,OAASA,IAAK,CAAA6B,MAAA,KAAW,SAAS,CAAA;GAAA,CAAA,CAAA;AAC5G,EAAA,IAAAe,QAAA,IAAY,CAAC3C,MAAA,CAAO+F,aAAe,EAAA;AACrC,IAAA,IAAI,CAACO,UAAA,EAAmB,OAAAW,WAAA,CAAA;AACxB,IAAA,OAAA,CAAQsC,mBAAmBzH,MAAS,GAAAmF,WAAA,CAAYV,OAAOgD,kBAAkB,CAAA,GAAItC,gBAAgB,EAAC,CAAA;AAChG,GAAA;EACA,OAAA,CAAQsC,kBAAmB,CAAAzH,MAAA,GAASyH,kBAAqB,GAAAtC,WAAA,KAAgB,EAAC,CAAA;AAC5E;;;;"}