{"version":3,"sources":["../../../src/collections/operations/restoreVersion.ts"],"sourcesContent":["import { status as httpStatus } from 'http-status'\n\nimport type { FindOneArgs } from '../../database/types.js'\nimport type { JsonObject, PayloadRequest, PopulateType, SelectType } from '../../types/index.js'\nimport type { Collection, TypeWithID } from '../config/types.js'\nimport type { FindOptions } from './local/find.js'\n\nimport { executeAccess } from '../../auth/executeAccess.js'\nimport { hasWhereAccessResult } from '../../auth/types.js'\nimport { combineQueries } from '../../database/combineQueries.js'\nimport { APIError, Forbidden, NotFound } from '../../errors/index.js'\nimport { afterChange } from '../../fields/hooks/afterChange/index.js'\nimport { afterRead } from '../../fields/hooks/afterRead/index.js'\nimport { beforeChange } from '../../fields/hooks/beforeChange/index.js'\nimport { beforeValidate } from '../../fields/hooks/beforeValidate/index.js'\nimport { commitTransaction } from '../../utilities/commitTransaction.js'\nimport { deepCopyObjectSimple } from '../../utilities/deepCopyObject.js'\nimport { hasDraftValidationEnabled } from '../../utilities/getVersionsConfig.js'\nimport { initTransaction } from '../../utilities/initTransaction.js'\nimport { killTransaction } from '../../utilities/killTransaction.js'\nimport { sanitizeSelect } from '../../utilities/sanitizeSelect.js'\nimport { getLatestCollectionVersion } from '../../versions/getLatestCollectionVersion.js'\nimport { saveVersion } from '../../versions/saveVersion.js'\nimport { buildAfterOperation } from './utilities/buildAfterOperation.js'\nimport { buildBeforeOperation } from './utilities/buildBeforeOperation.js'\nexport type Arguments = {\n  collection: Collection\n  currentDepth?: number\n  depth?: number\n  disableErrors?: boolean\n  disableTransaction?: boolean\n  draft?: boolean\n  id: number | string\n  overrideAccess?: boolean\n  populate?: PopulateType\n  req: PayloadRequest\n  showHiddenFields?: boolean\n} & Pick<FindOptions<string, SelectType>, 'select'>\n\nexport const restoreVersionOperation = async <\n  TData extends JsonObject & TypeWithID = JsonObject & TypeWithID,\n>(\n  args: Arguments,\n): Promise<TData> => {\n  const {\n    id,\n    collection: { config: collectionConfig },\n    depth,\n    draft: draftArg = false,\n    overrideAccess = false,\n    populate,\n    req,\n    req: { fallbackLocale, locale, payload },\n    select: incomingSelect,\n    showHiddenFields,\n  } = args\n\n  try {\n    const shouldCommit = !args.disableTransaction && (await initTransaction(args.req))\n\n    // /////////////////////////////////////\n    // beforeOperation - Collection\n    // /////////////////////////////////////\n\n    args = await buildBeforeOperation({\n      args,\n      collection: args.collection.config,\n      operation: 'restoreVersion',\n      overrideAccess,\n    })\n\n    if (!id) {\n      throw new APIError('Missing ID of version to restore.', httpStatus.BAD_REQUEST)\n    }\n\n    // /////////////////////////////////////\n    // Retrieve original raw version\n    // /////////////////////////////////////\n\n    const { docs: versionDocs } = await req.payload.db.findVersions({\n      collection: collectionConfig.slug,\n      limit: 1,\n      locale: 'all',\n      pagination: false,\n      req,\n      where: { id: { equals: id } },\n    })\n\n    const [rawVersionToRestore] = versionDocs\n\n    if (!rawVersionToRestore) {\n      throw new NotFound(req.t)\n    }\n\n    const { parent: parentDocID, version: versionToRestoreWithLocales } = rawVersionToRestore\n\n    // /////////////////////////////////////\n    // Access\n    // /////////////////////////////////////\n\n    const accessResults = !overrideAccess\n      ? await executeAccess({ id: parentDocID, req }, collectionConfig.access.update)\n      : true\n    const hasWherePolicy = hasWhereAccessResult(accessResults)\n\n    // /////////////////////////////////////\n    // Retrieve document\n    // /////////////////////////////////////\n\n    const findOneArgs: FindOneArgs = {\n      collection: collectionConfig.slug,\n      locale: 'all',\n      req,\n      where: combineQueries({ id: { equals: parentDocID } }, accessResults),\n    }\n\n    // Get the document from the non versioned collection\n    const doc = await req.payload.db.findOne<TData>(findOneArgs)\n\n    if (!doc && !hasWherePolicy) {\n      throw new NotFound(req.t)\n    }\n    if (!doc && hasWherePolicy) {\n      throw new Forbidden(req.t)\n    }\n\n    if (collectionConfig.trash && doc?.deletedAt) {\n      throw new APIError(\n        `Cannot restore a version of a trashed document (ID: ${parentDocID}). Restore the document first.`,\n        httpStatus.FORBIDDEN,\n      )\n    }\n\n    // /////////////////////////////////////\n    // fetch previousDoc\n    // /////////////////////////////////////\n    const prevDocWithLocales = await getLatestCollectionVersion({\n      id: parentDocID,\n      config: collectionConfig,\n      payload,\n      query: findOneArgs,\n      req,\n    })\n\n    // originalDoc with hoisted localized data\n    const validationLocale = payload.config.localization\n      ? payload.config.localization.defaultLocale\n      : locale!\n\n    const originalDoc = await afterRead({\n      collection: collectionConfig,\n      context: req.context,\n      depth: 0,\n      doc: deepCopyObjectSimple(prevDocWithLocales),\n      draft: draftArg,\n      fallbackLocale: null,\n      global: null,\n      locale: validationLocale,\n      overrideAccess: true,\n      req,\n      showHiddenFields: true,\n    })\n\n    // Use locale-hoisted version data for validation while preserving all locales in docWithLocales.\n    const prevVersionDoc = await afterRead({\n      collection: collectionConfig,\n      context: req.context,\n      depth: 0,\n      doc: deepCopyObjectSimple(rawVersionToRestore.version),\n      draft: draftArg,\n      fallbackLocale: null,\n      global: null,\n      locale: validationLocale,\n      overrideAccess: true,\n      req,\n      showHiddenFields: true,\n    })\n\n    // /////////////////////////////////////\n    // beforeValidate - Fields\n    // /////////////////////////////////////\n\n    req.context.isRestoringVersion = true\n\n    const reqWithValidationLocale = Object.assign(Object.create(req), req, {\n      fallbackLocale: null,\n      locale: validationLocale,\n    })\n\n    let data = await beforeValidate({\n      id: parentDocID,\n      collection: collectionConfig,\n      context: req.context,\n      data: deepCopyObjectSimple(prevVersionDoc),\n      doc: originalDoc,\n      global: null,\n      operation: 'update',\n      overrideAccess,\n      req: reqWithValidationLocale,\n    })\n\n    // /////////////////////////////////////\n    // beforeValidate - Collection\n    // /////////////////////////////////////\n\n    if (collectionConfig.hooks?.beforeValidate?.length) {\n      for (const hook of collectionConfig.hooks.beforeValidate) {\n        data =\n          (await hook({\n            collection: collectionConfig,\n            context: req.context,\n            data,\n            operation: 'update',\n            originalDoc,\n            req: reqWithValidationLocale,\n          })) || data\n      }\n    }\n\n    // /////////////////////////////////////\n    // beforeChange - Collection\n    // /////////////////////////////////////\n\n    if (collectionConfig.hooks?.beforeChange?.length) {\n      for (const hook of collectionConfig.hooks.beforeChange) {\n        data =\n          (await hook({\n            collection: collectionConfig,\n            context: req.context,\n            data,\n            operation: 'update',\n            originalDoc,\n            req: reqWithValidationLocale,\n          })) || data\n      }\n    }\n\n    // /////////////////////////////////////\n    // beforeChange - Fields\n    // /////////////////////////////////////\n\n    let result = await beforeChange({\n      id: parentDocID,\n      collection: collectionConfig,\n      context: req.context,\n      data: { ...data, id: parentDocID },\n      doc: originalDoc,\n      docWithLocales: versionToRestoreWithLocales,\n      global: null,\n      operation: 'update',\n      overrideAccess,\n      req: reqWithValidationLocale,\n      skipValidation: draftArg && !hasDraftValidationEnabled(collectionConfig),\n    })\n\n    // /////////////////////////////////////\n    // Update\n    // /////////////////////////////////////\n\n    const select = sanitizeSelect({\n      fields: collectionConfig.flattenedFields,\n      forceSelect: collectionConfig.forceSelect,\n      select: incomingSelect,\n    })\n\n    // Ensure updatedAt date is always updated\n    result.updatedAt = new Date().toISOString()\n    // Ensure status respects restoreAsDraft arg\n    result._status = draftArg ? 'draft' : result._status\n    if (!draftArg) {\n      result = await req.payload.db.updateOne({\n        id: parentDocID,\n        collection: collectionConfig.slug,\n        data: result,\n        req: reqWithValidationLocale,\n        select,\n      })\n    }\n\n    // /////////////////////////////////////\n    // Save restored doc as a new version\n    // /////////////////////////////////////\n\n    result = await saveVersion({\n      id: parentDocID,\n      autosave: false,\n      collection: collectionConfig,\n      docWithLocales: result,\n      draft: draftArg,\n      operation: 'restoreVersion',\n      payload,\n      req: reqWithValidationLocale,\n      select,\n    })\n\n    // /////////////////////////////////////\n    // afterRead - Fields\n    // /////////////////////////////////////\n\n    result = await afterRead({\n      collection: collectionConfig,\n      context: req.context,\n      depth: depth!,\n      doc: result,\n      // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n      draft: undefined,\n      fallbackLocale: fallbackLocale!,\n      global: null,\n      locale: locale!,\n      overrideAccess,\n      populate,\n      req,\n      select,\n      showHiddenFields: showHiddenFields!,\n    })\n\n    // /////////////////////////////////////\n    // afterRead - Collection\n    // /////////////////////////////////////\n\n    if (collectionConfig.hooks?.afterRead?.length) {\n      for (const hook of collectionConfig.hooks.afterRead) {\n        result =\n          (await hook({\n            collection: collectionConfig,\n            context: req.context,\n            doc: result,\n            overrideAccess,\n            req,\n          })) || result\n      }\n    }\n\n    // /////////////////////////////////////\n    // afterChange - Fields\n    // /////////////////////////////////////\n\n    result = await afterChange({\n      collection: collectionConfig,\n      context: req.context,\n      data: result,\n      doc: result,\n      global: null,\n      operation: 'update',\n      previousDoc: prevDocWithLocales,\n      req,\n    })\n\n    // /////////////////////////////////////\n    // afterChange - Collection\n    // /////////////////////////////////////\n\n    if (collectionConfig.hooks?.afterChange?.length) {\n      for (const hook of collectionConfig.hooks.afterChange) {\n        result =\n          (await hook({\n            collection: collectionConfig,\n            context: req.context,\n            data: result,\n            doc: result,\n            operation: 'update',\n            overrideAccess,\n            previousDoc: prevDocWithLocales,\n            req,\n          })) || result\n      }\n    }\n\n    // /////////////////////////////////////\n    // afterOperation - Collection\n    // /////////////////////////////////////\n\n    result = await buildAfterOperation({\n      args,\n      collection: collectionConfig,\n      operation: 'restoreVersion',\n      overrideAccess,\n      result,\n    })\n\n    if (shouldCommit) {\n      await commitTransaction(req)\n    }\n\n    return result\n  } catch (error: unknown) {\n    await killTransaction(req)\n    throw error\n  }\n}\n"],"names":["status","httpStatus","executeAccess","hasWhereAccessResult","combineQueries","APIError","Forbidden","NotFound","afterChange","afterRead","beforeChange","beforeValidate","commitTransaction","deepCopyObjectSimple","hasDraftValidationEnabled","initTransaction","killTransaction","sanitizeSelect","getLatestCollectionVersion","saveVersion","buildAfterOperation","buildBeforeOperation","restoreVersionOperation","args","id","collection","config","collectionConfig","depth","draft","draftArg","overrideAccess","populate","req","fallbackLocale","locale","payload","select","incomingSelect","showHiddenFields","shouldCommit","disableTransaction","operation","BAD_REQUEST","docs","versionDocs","db","findVersions","slug","limit","pagination","where","equals","rawVersionToRestore","t","parent","parentDocID","version","versionToRestoreWithLocales","accessResults","access","update","hasWherePolicy","findOneArgs","doc","findOne","trash","deletedAt","FORBIDDEN","prevDocWithLocales","query","validationLocale","localization","defaultLocale","originalDoc","context","global","prevVersionDoc","isRestoringVersion","reqWithValidationLocale","Object","assign","create","data","hooks","length","hook","result","docWithLocales","skipValidation","fields","flattenedFields","forceSelect","updatedAt","Date","toISOString","_status","updateOne","autosave","undefined","previousDoc","error"],"mappings":"AAAA,SAASA,UAAUC,UAAU,QAAQ,cAAa;AAOlD,SAASC,aAAa,QAAQ,8BAA6B;AAC3D,SAASC,oBAAoB,QAAQ,sBAAqB;AAC1D,SAASC,cAAc,QAAQ,mCAAkC;AACjE,SAASC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,wBAAuB;AACrE,SAASC,WAAW,QAAQ,0CAAyC;AACrE,SAASC,SAAS,QAAQ,wCAAuC;AACjE,SAASC,YAAY,QAAQ,2CAA0C;AACvE,SAASC,cAAc,QAAQ,6CAA4C;AAC3E,SAASC,iBAAiB,QAAQ,uCAAsC;AACxE,SAASC,oBAAoB,QAAQ,oCAAmC;AACxE,SAASC,yBAAyB,QAAQ,uCAAsC;AAChF,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,eAAe,QAAQ,qCAAoC;AACpE,SAASC,cAAc,QAAQ,oCAAmC;AAClE,SAASC,0BAA0B,QAAQ,+CAA8C;AACzF,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,SAASC,mBAAmB,QAAQ,qCAAoC;AACxE,SAASC,oBAAoB,QAAQ,sCAAqC;AAe1E,OAAO,MAAMC,0BAA0B,OAGrCC;IAEA,MAAM,EACJC,EAAE,EACFC,YAAY,EAAEC,QAAQC,gBAAgB,EAAE,EACxCC,KAAK,EACLC,OAAOC,WAAW,KAAK,EACvBC,iBAAiB,KAAK,EACtBC,QAAQ,EACRC,GAAG,EACHA,KAAK,EAAEC,cAAc,EAAEC,MAAM,EAAEC,OAAO,EAAE,EACxCC,QAAQC,cAAc,EACtBC,gBAAgB,EACjB,GAAGhB;IAEJ,IAAI;QACF,MAAMiB,eAAe,CAACjB,KAAKkB,kBAAkB,IAAK,MAAM1B,gBAAgBQ,KAAKU,GAAG;QAEhF,wCAAwC;QACxC,+BAA+B;QAC/B,wCAAwC;QAExCV,OAAO,MAAMF,qBAAqB;YAChCE;YACAE,YAAYF,KAAKE,UAAU,CAACC,MAAM;YAClCgB,WAAW;YACXX;QACF;QAEA,IAAI,CAACP,IAAI;YACP,MAAM,IAAInB,SAAS,qCAAqCJ,WAAW0C,WAAW;QAChF;QAEA,wCAAwC;QACxC,gCAAgC;QAChC,wCAAwC;QAExC,MAAM,EAAEC,MAAMC,WAAW,EAAE,GAAG,MAAMZ,IAAIG,OAAO,CAACU,EAAE,CAACC,YAAY,CAAC;YAC9DtB,YAAYE,iBAAiBqB,IAAI;YACjCC,OAAO;YACPd,QAAQ;YACRe,YAAY;YACZjB;YACAkB,OAAO;gBAAE3B,IAAI;oBAAE4B,QAAQ5B;gBAAG;YAAE;QAC9B;QAEA,MAAM,CAAC6B,oBAAoB,GAAGR;QAE9B,IAAI,CAACQ,qBAAqB;YACxB,MAAM,IAAI9C,SAAS0B,IAAIqB,CAAC;QAC1B;QAEA,MAAM,EAAEC,QAAQC,WAAW,EAAEC,SAASC,2BAA2B,EAAE,GAAGL;QAEtE,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,MAAMM,gBAAgB,CAAC5B,iBACnB,MAAM7B,cAAc;YAAEsB,IAAIgC;YAAavB;QAAI,GAAGN,iBAAiBiC,MAAM,CAACC,MAAM,IAC5E;QACJ,MAAMC,iBAAiB3D,qBAAqBwD;QAE5C,wCAAwC;QACxC,oBAAoB;QACpB,wCAAwC;QAExC,MAAMI,cAA2B;YAC/BtC,YAAYE,iBAAiBqB,IAAI;YACjCb,QAAQ;YACRF;YACAkB,OAAO/C,eAAe;gBAAEoB,IAAI;oBAAE4B,QAAQI;gBAAY;YAAE,GAAGG;QACzD;QAEA,qDAAqD;QACrD,MAAMK,MAAM,MAAM/B,IAAIG,OAAO,CAACU,EAAE,CAACmB,OAAO,CAAQF;QAEhD,IAAI,CAACC,OAAO,CAACF,gBAAgB;YAC3B,MAAM,IAAIvD,SAAS0B,IAAIqB,CAAC;QAC1B;QACA,IAAI,CAACU,OAAOF,gBAAgB;YAC1B,MAAM,IAAIxD,UAAU2B,IAAIqB,CAAC;QAC3B;QAEA,IAAI3B,iBAAiBuC,KAAK,IAAIF,KAAKG,WAAW;YAC5C,MAAM,IAAI9D,SACR,CAAC,oDAAoD,EAAEmD,YAAY,8BAA8B,CAAC,EAClGvD,WAAWmE,SAAS;QAExB;QAEA,wCAAwC;QACxC,oBAAoB;QACpB,wCAAwC;QACxC,MAAMC,qBAAqB,MAAMnD,2BAA2B;YAC1DM,IAAIgC;YACJ9B,QAAQC;YACRS;YACAkC,OAAOP;YACP9B;QACF;QAEA,0CAA0C;QAC1C,MAAMsC,mBAAmBnC,QAAQV,MAAM,CAAC8C,YAAY,GAChDpC,QAAQV,MAAM,CAAC8C,YAAY,CAACC,aAAa,GACzCtC;QAEJ,MAAMuC,cAAc,MAAMjE,UAAU;YAClCgB,YAAYE;YACZgD,SAAS1C,IAAI0C,OAAO;YACpB/C,OAAO;YACPoC,KAAKnD,qBAAqBwD;YAC1BxC,OAAOC;YACPI,gBAAgB;YAChB0C,QAAQ;YACRzC,QAAQoC;YACRxC,gBAAgB;YAChBE;YACAM,kBAAkB;QACpB;QAEA,iGAAiG;QACjG,MAAMsC,iBAAiB,MAAMpE,UAAU;YACrCgB,YAAYE;YACZgD,SAAS1C,IAAI0C,OAAO;YACpB/C,OAAO;YACPoC,KAAKnD,qBAAqBwC,oBAAoBI,OAAO;YACrD5B,OAAOC;YACPI,gBAAgB;YAChB0C,QAAQ;YACRzC,QAAQoC;YACRxC,gBAAgB;YAChBE;YACAM,kBAAkB;QACpB;QAEA,wCAAwC;QACxC,0BAA0B;QAC1B,wCAAwC;QAExCN,IAAI0C,OAAO,CAACG,kBAAkB,GAAG;QAEjC,MAAMC,0BAA0BC,OAAOC,MAAM,CAACD,OAAOE,MAAM,CAACjD,MAAMA,KAAK;YACrEC,gBAAgB;YAChBC,QAAQoC;QACV;QAEA,IAAIY,OAAO,MAAMxE,eAAe;YAC9Ba,IAAIgC;YACJ/B,YAAYE;YACZgD,SAAS1C,IAAI0C,OAAO;YACpBQ,MAAMtE,qBAAqBgE;YAC3Bb,KAAKU;YACLE,QAAQ;YACRlC,WAAW;YACXX;YACAE,KAAK8C;QACP;QAEA,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExC,IAAIpD,iBAAiByD,KAAK,EAAEzE,gBAAgB0E,QAAQ;YAClD,KAAK,MAAMC,QAAQ3D,iBAAiByD,KAAK,CAACzE,cAAc,CAAE;gBACxDwE,OACE,AAAC,MAAMG,KAAK;oBACV7D,YAAYE;oBACZgD,SAAS1C,IAAI0C,OAAO;oBACpBQ;oBACAzC,WAAW;oBACXgC;oBACAzC,KAAK8C;gBACP,MAAOI;YACX;QACF;QAEA,wCAAwC;QACxC,4BAA4B;QAC5B,wCAAwC;QAExC,IAAIxD,iBAAiByD,KAAK,EAAE1E,cAAc2E,QAAQ;YAChD,KAAK,MAAMC,QAAQ3D,iBAAiByD,KAAK,CAAC1E,YAAY,CAAE;gBACtDyE,OACE,AAAC,MAAMG,KAAK;oBACV7D,YAAYE;oBACZgD,SAAS1C,IAAI0C,OAAO;oBACpBQ;oBACAzC,WAAW;oBACXgC;oBACAzC,KAAK8C;gBACP,MAAOI;YACX;QACF;QAEA,wCAAwC;QACxC,wBAAwB;QACxB,wCAAwC;QAExC,IAAII,SAAS,MAAM7E,aAAa;YAC9Bc,IAAIgC;YACJ/B,YAAYE;YACZgD,SAAS1C,IAAI0C,OAAO;YACpBQ,MAAM;gBAAE,GAAGA,IAAI;gBAAE3D,IAAIgC;YAAY;YACjCQ,KAAKU;YACLc,gBAAgB9B;YAChBkB,QAAQ;YACRlC,WAAW;YACXX;YACAE,KAAK8C;YACLU,gBAAgB3D,YAAY,CAAChB,0BAA0Ba;QACzD;QAEA,wCAAwC;QACxC,SAAS;QACT,wCAAwC;QAExC,MAAMU,SAASpB,eAAe;YAC5ByE,QAAQ/D,iBAAiBgE,eAAe;YACxCC,aAAajE,iBAAiBiE,WAAW;YACzCvD,QAAQC;QACV;QAEA,0CAA0C;QAC1CiD,OAAOM,SAAS,GAAG,IAAIC,OAAOC,WAAW;QACzC,4CAA4C;QAC5CR,OAAOS,OAAO,GAAGlE,WAAW,UAAUyD,OAAOS,OAAO;QACpD,IAAI,CAAClE,UAAU;YACbyD,SAAS,MAAMtD,IAAIG,OAAO,CAACU,EAAE,CAACmD,SAAS,CAAC;gBACtCzE,IAAIgC;gBACJ/B,YAAYE,iBAAiBqB,IAAI;gBACjCmC,MAAMI;gBACNtD,KAAK8C;gBACL1C;YACF;QACF;QAEA,wCAAwC;QACxC,qCAAqC;QACrC,wCAAwC;QAExCkD,SAAS,MAAMpE,YAAY;YACzBK,IAAIgC;YACJ0C,UAAU;YACVzE,YAAYE;YACZ6D,gBAAgBD;YAChB1D,OAAOC;YACPY,WAAW;YACXN;YACAH,KAAK8C;YACL1C;QACF;QAEA,wCAAwC;QACxC,qBAAqB;QACrB,wCAAwC;QAExCkD,SAAS,MAAM9E,UAAU;YACvBgB,YAAYE;YACZgD,SAAS1C,IAAI0C,OAAO;YACpB/C,OAAOA;YACPoC,KAAKuB;YACL,oFAAoF;YACpF1D,OAAOsE;YACPjE,gBAAgBA;YAChB0C,QAAQ;YACRzC,QAAQA;YACRJ;YACAC;YACAC;YACAI;YACAE,kBAAkBA;QACpB;QAEA,wCAAwC;QACxC,yBAAyB;QACzB,wCAAwC;QAExC,IAAIZ,iBAAiByD,KAAK,EAAE3E,WAAW4E,QAAQ;YAC7C,KAAK,MAAMC,QAAQ3D,iBAAiByD,KAAK,CAAC3E,SAAS,CAAE;gBACnD8E,SACE,AAAC,MAAMD,KAAK;oBACV7D,YAAYE;oBACZgD,SAAS1C,IAAI0C,OAAO;oBACpBX,KAAKuB;oBACLxD;oBACAE;gBACF,MAAOsD;YACX;QACF;QAEA,wCAAwC;QACxC,uBAAuB;QACvB,wCAAwC;QAExCA,SAAS,MAAM/E,YAAY;YACzBiB,YAAYE;YACZgD,SAAS1C,IAAI0C,OAAO;YACpBQ,MAAMI;YACNvB,KAAKuB;YACLX,QAAQ;YACRlC,WAAW;YACX0D,aAAa/B;YACbpC;QACF;QAEA,wCAAwC;QACxC,2BAA2B;QAC3B,wCAAwC;QAExC,IAAIN,iBAAiByD,KAAK,EAAE5E,aAAa6E,QAAQ;YAC/C,KAAK,MAAMC,QAAQ3D,iBAAiByD,KAAK,CAAC5E,WAAW,CAAE;gBACrD+E,SACE,AAAC,MAAMD,KAAK;oBACV7D,YAAYE;oBACZgD,SAAS1C,IAAI0C,OAAO;oBACpBQ,MAAMI;oBACNvB,KAAKuB;oBACL7C,WAAW;oBACXX;oBACAqE,aAAa/B;oBACbpC;gBACF,MAAOsD;YACX;QACF;QAEA,wCAAwC;QACxC,8BAA8B;QAC9B,wCAAwC;QAExCA,SAAS,MAAMnE,oBAAoB;YACjCG;YACAE,YAAYE;YACZe,WAAW;YACXX;YACAwD;QACF;QAEA,IAAI/C,cAAc;YAChB,MAAM5B,kBAAkBqB;QAC1B;QAEA,OAAOsD;IACT,EAAE,OAAOc,OAAgB;QACvB,MAAMrF,gBAAgBiB;QACtB,MAAMoE;IACR;AACF,EAAC"}