{
  "version": 3,
  "sources": ["<define:self.__SW_MANIFEST>", "node_modules/serwist/dist/chunks/waitUntil.js", "node_modules/idb/build/index.js", "node_modules/serwist/dist/chunks/printInstallDetails.js", "node_modules/@serwist/utils/dist/index.js", "node_modules/serwist/dist/index.js", "node_modules/@serwist/turbopack/dist/index.worker.js", "app/sw.ts"],
  "sourcesContent": ["[\n  {\n    \"url\": \"/_next/static/tTUNg_VGiNjhYzZhYPC6w/_ssgManifest.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/tTUNg_VGiNjhYzZhYPC6w/_clientMiddlewareManifest.json\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/tTUNg_VGiNjhYzZhYPC6w/_buildManifest.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/turbopack-8478e77200cf17cf.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/ff1a16fafef87110.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/fb166001c03cb8a3.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f9f432c776d06668.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f9e3b3104f5dd2ec.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f95c455872ec9554.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f800b3547a174a8b.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f79ee52e2a7e0d0b.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f740f296d2aa9cf3.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f6137111397647f3.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f535400527b56223.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f2c2f48fce686d41.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/f0adfa755be27afc.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/ed40ad4b704bbd47.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/e904cfa52618ae2d.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/e7e51d7e4c798324.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/e7e2e91495f32515.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/e24b678eee06de65.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/e0f0c686b9bb8595.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/e0b599ec5e11b6be.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/e0a8260ad29ac710.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/df4beef76b81552e.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/dd93c0de7f207218.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/dbe4c5f82f18dae4.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/db0104a70e2296f5.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/d9938534a37bf2d3.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/d98128835aa02af3.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/d65d230f2d41c6e4.css\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/d37e73289552d286.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/d25a3adf528a2904.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/d121e40934dc7a75.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/cf80a78c9a681746.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/cc9a460449f7ae88.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/cae5df1728bd8a67.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/c9ada260b65ee606.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/c8f062849a5941e1.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/c89f498d1321f412.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/c612c06dd21e921b.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/c4bd2fafa46a0c14.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/c322ad2063274a95.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/bf4fa2861348d8b7.css\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/b803cfa4419e654a.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/b7b968e10244efcb.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/b71a3ddc31ac8f41.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/b6d5d0b1faed885a.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/b3c217852673ecf7.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/b2db1a6cc196e8fe.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/b1da4a82007e9a12.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/aff034a3c11a824d.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/af8a9c553e4c6092.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/af6262c2feb4c1b8.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/af04c95ad2888947.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/add619ecd2a4d5a1.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/ac07d6a3dd1ebb7c.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/a9aa4cc44517436e.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/a983373a0bd80049.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/a6dad97d9634a72d.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/a117694a40cb93b2.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/a10a2aef2148c65d.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/9d1f16e5136c93ec.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/9c3d77a569e20dd2.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/9a0119d8c5948df0.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/989a86cde0f785a6.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/972ad4ce9a37d8ea.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/92e7495555644bbb.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/92e3817519626c3d.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/8faa695fd2a8609f.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/8d88a7a1fcb1f54e.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/8c46859c29496428.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/8bdd3924e0ae63c4.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/899b5146945b834b.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/8515d3fd088a6c72.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/836da91c9b287b4b.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/81a06e1e16a4fa6e.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/80c7ae48e9b3df2d.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/7f12929ec0557e73.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/7c23271b91afdcdc.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/7b90e889c1a4e979.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/7b84675682813616.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/7b73ae745ddc4b4c.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/7968b0473c76c506.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/780d866531f0fe84.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/74b2846f6947d628.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/74834508bddfdd55.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/7195017787837bfd.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/6c857ea9a01587b3.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/6b76970e7f5fbdf5.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/6b6e8a6943fa2f11.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/6275db3a88a91b0a.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/61b652e9098228ed.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/5f3b23edbe319b56.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/5de73808505e80a9.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/5da82f7e23a1152a.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/5d5fcfe988b82cbf.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/5d08cd8f01f7a346.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/58008f89b34a7f8f.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/55ec217933ee8c2b.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/55cf6f54ba66643b.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/547757ebb04f27ee.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/54480752339ab15f.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/534ef77bd3887fff.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/51f6db868c901976.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/514ede6818b3c672.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/50e7eae864eadf79.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/4d456f29526955d4.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/4849fe0b3b960fa2.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/482f6359a3c66c56.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/4722bf842eaf500c.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/4717dc7725769f0c.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/45f9820827128048.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/4529f823d2e95e83.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/4437cc7fe89019df.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/4375d6c13e59c31f.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/42d02885d5910522.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/40038071c3bb9c56.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/3de6e7b542bbfc81.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/3d2a259f66e8f4b5.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/3d2931537973f5bf.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/3b9cc5350e6fd581.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/3b92b5f7af5cccc1.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/3aa3a5ab143befba.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/3a7e3b3cd0addc49.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/3556ddd21e38844e.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/34e60067b1f72b44.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/2b5705446b7624f0.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/2b2a75d2a75e5bf0.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/29f446434eb8a06a.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/28fd02fea51297c5.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/25506b7f96a3535e.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/1fdb4c251ec00f3a.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/1eca08ba778d29a1.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/1eb79b3159337322.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/1d9962727296f09d.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/1840954d30c3dc51.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/183ad4a2fab1285e.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/1215f3c15f02c40b.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/10199c99a0f6ecba.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/0f73838a7cd1db1c.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/0c6b5aaa753f5040.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/08ab1148349e03a7.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/0693492631166d37.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/02f89bc7641388a9.css\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/00b9a0380e5e0428.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/_next/static/chunks/003d2c346521a3be.js\",\n    \"revision\": null\n  },\n  {\n    \"url\": \"/robots.txt\",\n    \"revision\": \"c13389e3ab589effe1e1cf477fde494d\"\n  },\n  {\n    \"url\": \"/pwa-64x64.png\",\n    \"revision\": \"4ff5cd99397ada06c9db166b85b298c2\"\n  },\n  {\n    \"url\": \"/pwa-512x512.png\",\n    \"revision\": \"c250d6e60ee840d90b161307760ac909\"\n  },\n  {\n    \"url\": \"/pwa-192x192.png\",\n    \"revision\": \"51cf3c10455a2f7aac3cfc1c0dfea40e\"\n  },\n  {\n    \"url\": \"/maskable-icon-512x512.png\",\n    \"revision\": \"c130bf00d9587c8ede20ed8d844f9df5\"\n  },\n  {\n    \"url\": \"/manifest.json\",\n    \"revision\": \"aad13660911a409464a6afcbfcbcebb0\"\n  },\n  {\n    \"url\": \"/favicon.svg\",\n    \"revision\": \"67496740d16edb2d0f8f583da9372fea\"\n  },\n  {\n    \"url\": \"/apple-touch-icon-180x180.png\",\n    \"revision\": \"fd9dd2a0f284779f88b2c846f27ef87a\"\n  },\n  {\n    \"url\": \"/images/logo_white.webp\",\n    \"revision\": \"ffd83e4a06450f6ab9d59d92ee874527\"\n  },\n  {\n    \"url\": \"/images/error-404-monochrome.svg\",\n    \"revision\": \"05b9d80d08e0d3935083500650dd6ef3\"\n  },\n  {\n    \"url\": \"/images/animated_logo.svg\",\n    \"revision\": \"934b28e31bc100ce934036f43a285abf\"\n  },\n  {\n    \"url\": \"/images/broker/tbank.png\",\n    \"revision\": \"25a5e69ddfe235529c3cb1182252e0bf\"\n  },\n  {\n    \"url\": \"/images/broker/sber.svg\",\n    \"revision\": \"7c0378b2ee66b906200f4b01eb3a9197\"\n  },\n  {\n    \"url\": \"/images/broker/potok.png\",\n    \"revision\": \"4a1e4f1f3c0d2dcd2da8bc62de2f8705\"\n  },\n  {\n    \"url\": \"/images/broker/money_friends.png\",\n    \"revision\": \"89fb893c896d146cc3ca21726ad2a59d\"\n  },\n  {\n    \"url\": \"/images/broker/jetlend.png\",\n    \"revision\": \"cf760e72d9708fe16edd86950eb3ff2c\"\n  },\n  {\n    \"url\": \"/images/broker/flagman_crowd.jpg\",\n    \"revision\": \"d8254da0b3796d4fca9d794afeb78808\"\n  },\n  {\n    \"url\": \"/images/broker/alfa_bank.svg\",\n    \"revision\": \"b82ad657f119dbf2c7564a595a299ed3\"\n  }\n]", "const _cacheNameDetails = {\n    googleAnalytics: \"googleAnalytics\",\n    precache: \"precache-v2\",\n    prefix: \"serwist\",\n    runtime: \"runtime\",\n    suffix: typeof registration !== \"undefined\" ? registration.scope : \"\"\n};\nconst _createCacheName = (cacheName)=>{\n    return [\n        _cacheNameDetails.prefix,\n        cacheName,\n        _cacheNameDetails.suffix\n    ].filter((value)=>value && value.length > 0).join(\"-\");\n};\nconst eachCacheNameDetail = (fn)=>{\n    for (const key of Object.keys(_cacheNameDetails)){\n        fn(key);\n    }\n};\nconst cacheNames = {\n    updateDetails: (details)=>{\n        eachCacheNameDetail((key)=>{\n            const detail = details[key];\n            if (typeof detail === \"string\") {\n                _cacheNameDetails[key] = detail;\n            }\n        });\n    },\n    getGoogleAnalyticsName: (userCacheName)=>{\n        return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);\n    },\n    getPrecacheName: (userCacheName)=>{\n        return userCacheName || _createCacheName(_cacheNameDetails.precache);\n    },\n    getPrefix: ()=>{\n        return _cacheNameDetails.prefix;\n    },\n    getRuntimeName: (userCacheName)=>{\n        return userCacheName || _createCacheName(_cacheNameDetails.runtime);\n    },\n    getSuffix: ()=>{\n        return _cacheNameDetails.suffix;\n    }\n};\n\nlet supportStatus;\nfunction canConstructResponseFromBodyStream() {\n    if (supportStatus === undefined) {\n        const testResponse = new Response(\"\");\n        if (\"body\" in testResponse) {\n            try {\n                new Response(testResponse.body);\n                supportStatus = true;\n            } catch  {\n                supportStatus = false;\n            }\n        }\n        supportStatus = false;\n    }\n    return supportStatus;\n}\n\nconst messages = {\n    \"invalid-value\": ({ paramName, validValueDescription, value })=>{\n        if (!paramName || !validValueDescription) {\n            throw new Error(`Unexpected input to 'invalid-value' error.`);\n        }\n        return `The '${paramName}' parameter was given a value with an ` + `unexpected value. ${validValueDescription} Received a value of ` + `${JSON.stringify(value)}.`;\n    },\n    \"not-an-array\": ({ moduleName, className, funcName, paramName })=>{\n        if (!moduleName || !className || !funcName || !paramName) {\n            throw new Error(`Unexpected input to 'not-an-array' error.`);\n        }\n        return `The parameter '${paramName}' passed into ` + `'${moduleName}.${className}.${funcName}()' must be an array.`;\n    },\n    \"incorrect-type\": ({ expectedType, paramName, moduleName, className, funcName })=>{\n        if (!expectedType || !paramName || !moduleName || !funcName) {\n            throw new Error(`Unexpected input to 'incorrect-type' error.`);\n        }\n        const classNameStr = className ? `${className}.` : \"\";\n        return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}` + `${funcName}()' must be of type ${expectedType}.`;\n    },\n    \"incorrect-class\": ({ expectedClassName, paramName, moduleName, className, funcName, isReturnValueProblem })=>{\n        if (!expectedClassName || !moduleName || !funcName) {\n            throw new Error(`Unexpected input to 'incorrect-class' error.`);\n        }\n        const classNameStr = className ? `${className}.` : \"\";\n        if (isReturnValueProblem) {\n            return `The return value from '${moduleName}.${classNameStr}${funcName}()' must be an instance of class ${expectedClassName}.`;\n        }\n        return `The parameter '${paramName}' passed into ` + `'${moduleName}.${classNameStr}${funcName}()' ` + `must be an instance of class ${expectedClassName}.`;\n    },\n    \"missing-a-method\": ({ expectedMethod, paramName, moduleName, className, funcName })=>{\n        if (!expectedMethod || !paramName || !moduleName || !className || !funcName) {\n            throw new Error(`Unexpected input to 'missing-a-method' error.`);\n        }\n        return `${moduleName}.${className}.${funcName}() expected the ` + `'${paramName}' parameter to expose a '${expectedMethod}' method.`;\n    },\n    \"add-to-cache-list-unexpected-type\": ({ entry })=>{\n        return `An unexpected entry was passed to 'serwist.Serwist.addToPrecacheList()' The entry '${JSON.stringify(entry)}' isn't supported. You must supply an array of strings with one or more characters, objects with a url property or Request objects.`;\n    },\n    \"add-to-cache-list-conflicting-entries\": ({ firstEntry, secondEntry })=>{\n        if (!firstEntry || !secondEntry) {\n            throw new Error(\"Unexpected input to \" + `'add-to-cache-list-duplicate-entries' error.`);\n        }\n        return `Two of the entries passed to 'serwist.Serwist.addToPrecacheList()' had the URL ${firstEntry} but different revision details. Serwist is unable to cache and version the asset correctly. Please remove one of the entries.`;\n    },\n    \"plugin-error-request-will-fetch\": ({ thrownErrorMessage })=>{\n        if (!thrownErrorMessage) {\n            throw new Error(\"Unexpected input to \" + `'plugin-error-request-will-fetch', error.`);\n        }\n        return `An error was thrown by a plugin's 'requestWillFetch()' method. The thrown error message was: '${thrownErrorMessage}'.`;\n    },\n    \"invalid-cache-name\": ({ cacheNameId, value })=>{\n        if (!cacheNameId) {\n            throw new Error(`Expected a 'cacheNameId' for error 'invalid-cache-name'`);\n        }\n        return `You must provide a name containing at least one character for setCacheDetails({${cacheNameId}: '...'}). Received a value of '${JSON.stringify(value)}'`;\n    },\n    \"unregister-route-but-not-found-with-method\": ({ method })=>{\n        if (!method) {\n            throw new Error(\"Unexpected input to \" + `'unregister-route-but-not-found-with-method' error.`);\n        }\n        return `The route you're trying to unregister was not  previously registered for the method type '${method}'.`;\n    },\n    \"unregister-route-route-not-registered\": ()=>{\n        return `The route you're trying to unregister was not previously ` + \"registered.\";\n    },\n    \"queue-replay-failed\": ({ name })=>{\n        return `Replaying the background sync queue '${name}' failed.`;\n    },\n    \"duplicate-queue-name\": ({ name })=>{\n        return `The queue name '${name}' is already being used. All instances of 'serwist.BackgroundSyncQueue' must be given unique names.`;\n    },\n    \"expired-test-without-max-age\": ({ methodName, paramName })=>{\n        return `The '${methodName}()' method can only be used when the ` + `'${paramName}' is used in the constructor.`;\n    },\n    \"unsupported-route-type\": ({ moduleName, className, funcName, paramName })=>{\n        return `The supplied '${paramName}' parameter was an unsupported type. Please check the docs for ${moduleName}.${className}.${funcName} for valid input types.`;\n    },\n    \"not-array-of-class\": ({ value, expectedClass, moduleName, className, funcName, paramName })=>{\n        return `The supplied '${paramName}' parameter must be an array of '${expectedClass}' objects. Received '${JSON.stringify(value)},'. Please check the call to ${moduleName}.${className}.${funcName}() to fix the issue.`;\n    },\n    \"max-entries-or-age-required\": ({ moduleName, className, funcName })=>{\n        return `You must define either 'config.maxEntries' or 'config.maxAgeSeconds' in '${moduleName}.${className}.${funcName}'`;\n    },\n    \"statuses-or-headers-required\": ({ moduleName, className, funcName })=>{\n        return `You must define either 'config.statuses' or 'config.headers' in '${moduleName}.${className}.${funcName}'`;\n    },\n    \"invalid-string\": ({ moduleName, funcName, paramName })=>{\n        if (!paramName || !moduleName || !funcName) {\n            throw new Error(`Unexpected input to 'invalid-string' error.`);\n        }\n        return `When using strings, the '${paramName}' parameter must start with 'http' (for cross-origin matches) or '/' (for same-origin matches). Please see the docs for ${moduleName}.${funcName}() for more info.`;\n    },\n    \"channel-name-required\": ()=>{\n        return \"You must provide a channelName to construct a \" + \"BroadcastCacheUpdate instance.\";\n    },\n    \"invalid-responses-are-same-args\": ()=>{\n        return \"The arguments passed into responsesAreSame() appear to be \" + \"invalid. Please ensure valid Responses are used.\";\n    },\n    \"expire-custom-caches-only\": ()=>{\n        return `You must provide a 'cacheName' property when using the ` + \"expiration plugin with a runtime caching strategy.\";\n    },\n    \"unit-must-be-bytes\": ({ normalizedRangeHeader })=>{\n        if (!normalizedRangeHeader) {\n            throw new Error(`Unexpected input to 'unit-must-be-bytes' error.`);\n        }\n        return `The 'unit' portion of the Range header must be set to 'bytes'. The Range header provided was \"${normalizedRangeHeader}\"`;\n    },\n    \"single-range-only\": ({ normalizedRangeHeader })=>{\n        if (!normalizedRangeHeader) {\n            throw new Error(`Unexpected input to 'single-range-only' error.`);\n        }\n        return `Multiple ranges are not supported. Please use a  single start value, and optional end value. The Range header provided was \"${normalizedRangeHeader}\"`;\n    },\n    \"invalid-range-values\": ({ normalizedRangeHeader })=>{\n        if (!normalizedRangeHeader) {\n            throw new Error(`Unexpected input to 'invalid-range-values' error.`);\n        }\n        return `The Range header is missing both start and end values. At least one of those values is needed. The Range header provided was \"${normalizedRangeHeader}\"`;\n    },\n    \"no-range-header\": ()=>{\n        return \"No Range header was found in the Request provided.\";\n    },\n    \"range-not-satisfiable\": ({ size, start, end })=>{\n        return `The start (${start}) and end (${end}) values in the Range are ` + `not satisfiable by the cached response, which is ${size} bytes.`;\n    },\n    \"attempt-to-cache-non-get-request\": ({ url, method })=>{\n        return `Unable to cache '${url}' because it is a '${method}' request and only 'GET' requests can be cached.`;\n    },\n    \"cache-put-with-no-response\": ({ url })=>{\n        return `There was an attempt to cache '${url}' but the response was not defined.`;\n    },\n    \"no-response\": ({ url, error })=>{\n        let message = `The strategy could not generate a response for '${url}'.`;\n        if (error) {\n            message += ` The underlying error is ${error}.`;\n        }\n        return message;\n    },\n    \"bad-precaching-response\": ({ url, status })=>{\n        return `The precaching request for '${url}' failed${status ? ` with an HTTP status of ${status}.` : \".\"}`;\n    },\n    \"non-precached-url\": ({ url })=>{\n        return `'createHandlerBoundToURL(\"${url}\")' was called, but that URL is not precached. Please pass in a URL that is precached instead.`;\n    },\n    \"add-to-cache-list-conflicting-integrities\": ({ url })=>{\n        return `Two of the entries passed to 'serwist.Serwist.addToPrecacheList()' had the URL ${url} with different integrity values. Please remove one of them.`;\n    },\n    \"missing-precache-entry\": ({ cacheName, url })=>{\n        return `Unable to find a precached response in ${cacheName} for ${url}.`;\n    },\n    \"cross-origin-copy-response\": ({ origin })=>{\n        return `'@serwist/core.copyResponse()' can only be used with same-origin responses. It was passed a response with origin ${origin}.`;\n    },\n    \"opaque-streams-source\": ({ type })=>{\n        const message = `One of the '@serwist/streams' sources resulted in an '${type}' response.`;\n        if (type === \"opaqueredirect\") {\n            return `${message} Please do not use a navigation request that results in a redirect as a source.`;\n        }\n        return `${message} Please ensure your sources are CORS-enabled.`;\n    }\n};\n\nconst fallback = (code, ...args)=>{\n    let msg = code;\n    if (args.length > 0) {\n        msg += ` :: ${JSON.stringify(args)}`;\n    }\n    return msg;\n};\nconst generatorFunction = (code, details = {})=>{\n    const message = messages[code];\n    if (!message) {\n        throw new Error(`Unable to find message for code '${code}'.`);\n    }\n    return message(details);\n};\nconst messageGenerator = process.env.NODE_ENV === \"production\" ? fallback : generatorFunction;\n\nclass SerwistError extends Error {\n    details;\n    constructor(errorCode, details){\n        const message = messageGenerator(errorCode, details);\n        super(message);\n        this.name = errorCode;\n        this.details = details;\n    }\n}\n\nconst isArray = (value, details)=>{\n    if (!Array.isArray(value)) {\n        throw new SerwistError(\"not-an-array\", details);\n    }\n};\nconst hasMethod = (object, expectedMethod, details)=>{\n    const type = typeof object[expectedMethod];\n    if (type !== \"function\") {\n        details.expectedMethod = expectedMethod;\n        throw new SerwistError(\"missing-a-method\", details);\n    }\n};\nconst isType = (object, expectedType, details)=>{\n    if (typeof object !== expectedType) {\n        details.expectedType = expectedType;\n        throw new SerwistError(\"incorrect-type\", details);\n    }\n};\nconst isInstance = (object, expectedClass, details)=>{\n    if (!(object instanceof expectedClass)) {\n        details.expectedClassName = expectedClass.name;\n        throw new SerwistError(\"incorrect-class\", details);\n    }\n};\nconst isOneOf = (value, validValues, details)=>{\n    if (!validValues.includes(value)) {\n        details.validValueDescription = `Valid values are ${JSON.stringify(validValues)}.`;\n        throw new SerwistError(\"invalid-value\", details);\n    }\n};\nconst isArrayOfClass = (value, expectedClass, details)=>{\n    const error = new SerwistError(\"not-array-of-class\", details);\n    if (!Array.isArray(value)) {\n        throw error;\n    }\n    for (const item of value){\n        if (!(item instanceof expectedClass)) {\n            throw error;\n        }\n    }\n};\nconst finalAssertExports = process.env.NODE_ENV === \"production\" ? null : {\n    hasMethod,\n    isArray,\n    isInstance,\n    isOneOf,\n    isType,\n    isArrayOfClass\n};\n\nconst getFriendlyURL = (url)=>{\n    const urlObj = new URL(String(url), location.href);\n    return urlObj.href.replace(new RegExp(`^${location.origin}`), \"\");\n};\n\nconst logger = process.env.NODE_ENV === \"production\" || typeof self === \"undefined\" ? null : (()=>{\n    if (!(\"__WB_DISABLE_DEV_LOGS\" in globalThis)) {\n        self.__WB_DISABLE_DEV_LOGS = false;\n    }\n    let inGroup = false;\n    const methodToColorMap = {\n        debug: \"#7f8c8d\",\n        log: \"#2ecc71\",\n        warn: \"#f39c12\",\n        error: \"#c0392b\",\n        groupCollapsed: \"#3498db\",\n        groupEnd: null\n    };\n    const print = (method, args)=>{\n        if (self.__WB_DISABLE_DEV_LOGS) {\n            return;\n        }\n        if (method === \"groupCollapsed\") {\n            if (typeof navigator !== \"undefined\" && /^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n                console[method](...args);\n                return;\n            }\n        }\n        const styles = [\n            `background: ${methodToColorMap[method]}`,\n            \"border-radius: 0.5em\",\n            \"color: white\",\n            \"font-weight: bold\",\n            \"padding: 2px 0.5em\"\n        ];\n        const logPrefix = inGroup ? [] : [\n            \"%cserwist\",\n            styles.join(\";\")\n        ];\n        console[method](...logPrefix, ...args);\n        if (method === \"groupCollapsed\") {\n            inGroup = true;\n        }\n        if (method === \"groupEnd\") {\n            inGroup = false;\n        }\n    };\n    const loggerMethods = Object.keys(methodToColorMap);\n    return loggerMethods.reduce((api, method)=>{\n        api[method] = (...args)=>{\n            print(method, args);\n        };\n        return api;\n    }, {});\n})();\n\nfunction timeout(ms) {\n    return new Promise((resolve)=>setTimeout(resolve, ms));\n}\n\nconst quotaErrorCallbacks = new Set();\n\nfunction stripParams(fullURL, ignoreParams) {\n    const strippedURL = new URL(fullURL);\n    for (const param of ignoreParams){\n        strippedURL.searchParams.delete(param);\n    }\n    return strippedURL.href;\n}\nasync function cacheMatchIgnoreParams(cache, request, ignoreParams, matchOptions) {\n    const strippedRequestURL = stripParams(request.url, ignoreParams);\n    if (request.url === strippedRequestURL) {\n        return cache.match(request, matchOptions);\n    }\n    const keysOptions = {\n        ...matchOptions,\n        ignoreSearch: true\n    };\n    const cacheKeys = await cache.keys(request, keysOptions);\n    for (const cacheKey of cacheKeys){\n        const strippedCacheKeyURL = stripParams(cacheKey.url, ignoreParams);\n        if (strippedRequestURL === strippedCacheKeyURL) {\n            return cache.match(cacheKey, matchOptions);\n        }\n    }\n    return;\n}\n\nclass Deferred {\n    promise;\n    resolve;\n    reject;\n    constructor(){\n        this.promise = new Promise((resolve, reject)=>{\n            this.resolve = resolve;\n            this.reject = reject;\n        });\n    }\n}\n\nconst executeQuotaErrorCallbacks = async ()=>{\n    if (process.env.NODE_ENV !== \"production\") {\n        logger.log(`About to run ${quotaErrorCallbacks.size} callbacks to clean up caches.`);\n    }\n    for (const callback of quotaErrorCallbacks){\n        await callback();\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.log(callback, \"is complete.\");\n        }\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n        logger.log(\"Finished running callbacks.\");\n    }\n};\n\nconst SUBSTRING_TO_FIND = \"-precache-\";\nconst deleteOutdatedCaches = async (currentPrecacheName, substringToFind = SUBSTRING_TO_FIND)=>{\n    const cacheNames = await self.caches.keys();\n    const cacheNamesToDelete = cacheNames.filter((cacheName)=>{\n        return cacheName.includes(substringToFind) && cacheName.includes(self.registration.scope) && cacheName !== currentPrecacheName;\n    });\n    await Promise.all(cacheNamesToDelete.map((cacheName)=>self.caches.delete(cacheName)));\n    return cacheNamesToDelete;\n};\n\nconst cleanupOutdatedCaches = (cacheName)=>{\n    self.addEventListener(\"activate\", (event)=>{\n        event.waitUntil(deleteOutdatedCaches(cacheNames.getPrecacheName(cacheName)).then((cachesDeleted)=>{\n            if (process.env.NODE_ENV !== \"production\") {\n                if (cachesDeleted.length > 0) {\n                    logger.log(\"The following out-of-date precaches were cleaned up automatically:\", cachesDeleted);\n                }\n            }\n        }));\n    });\n};\n\nconst clientsClaim = ()=>{\n    self.addEventListener(\"activate\", ()=>self.clients.claim());\n};\n\nconst waitUntil = (event, asyncFn)=>{\n    const returnPromise = asyncFn();\n    event.waitUntil(returnPromise);\n    return returnPromise;\n};\n\nexport { Deferred as D, SerwistError as S, clientsClaim as a, cleanupOutdatedCaches as b, cacheNames as c, canConstructResponseFromBodyStream as d, cacheMatchIgnoreParams as e, finalAssertExports as f, getFriendlyURL as g, executeQuotaErrorCallbacks as h, logger as l, quotaErrorCallbacks as q, timeout as t, waitUntil as w };\n", "const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n    return (idbProxyableTypes ||\n        (idbProxyableTypes = [\n            IDBDatabase,\n            IDBObjectStore,\n            IDBIndex,\n            IDBCursor,\n            IDBTransaction,\n        ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n    return (cursorAdvanceMethods ||\n        (cursorAdvanceMethods = [\n            IDBCursor.prototype.advance,\n            IDBCursor.prototype.continue,\n            IDBCursor.prototype.continuePrimaryKey,\n        ]));\n}\nconst transactionDoneMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n    const promise = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            request.removeEventListener('success', success);\n            request.removeEventListener('error', error);\n        };\n        const success = () => {\n            resolve(wrap(request.result));\n            unlisten();\n        };\n        const error = () => {\n            reject(request.error);\n            unlisten();\n        };\n        request.addEventListener('success', success);\n        request.addEventListener('error', error);\n    });\n    // This mapping exists in reverseTransformCache but doesn't exist in transformCache. This\n    // is because we create many promises from a single IDBRequest.\n    reverseTransformCache.set(promise, request);\n    return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n    // Early bail if we've already created a done promise for this transaction.\n    if (transactionDoneMap.has(tx))\n        return;\n    const done = new Promise((resolve, reject) => {\n        const unlisten = () => {\n            tx.removeEventListener('complete', complete);\n            tx.removeEventListener('error', error);\n            tx.removeEventListener('abort', error);\n        };\n        const complete = () => {\n            resolve();\n            unlisten();\n        };\n        const error = () => {\n            reject(tx.error || new DOMException('AbortError', 'AbortError'));\n            unlisten();\n        };\n        tx.addEventListener('complete', complete);\n        tx.addEventListener('error', error);\n        tx.addEventListener('abort', error);\n    });\n    // Cache it for later retrieval.\n    transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n    get(target, prop, receiver) {\n        if (target instanceof IDBTransaction) {\n            // Special handling for transaction.done.\n            if (prop === 'done')\n                return transactionDoneMap.get(target);\n            // Make tx.store return the only store in the transaction, or undefined if there are many.\n            if (prop === 'store') {\n                return receiver.objectStoreNames[1]\n                    ? undefined\n                    : receiver.objectStore(receiver.objectStoreNames[0]);\n            }\n        }\n        // Else transform whatever we get back.\n        return wrap(target[prop]);\n    },\n    set(target, prop, value) {\n        target[prop] = value;\n        return true;\n    },\n    has(target, prop) {\n        if (target instanceof IDBTransaction &&\n            (prop === 'done' || prop === 'store')) {\n            return true;\n        }\n        return prop in target;\n    },\n};\nfunction replaceTraps(callback) {\n    idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n    // Due to expected object equality (which is enforced by the caching in `wrap`), we\n    // only create one new func per func.\n    // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n    // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n    // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n    // with real promises, so each advance methods returns a new promise for the cursor object, or\n    // undefined if the end of the cursor has been reached.\n    if (getCursorAdvanceMethods().includes(func)) {\n        return function (...args) {\n            // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n            // the original object.\n            func.apply(unwrap(this), args);\n            return wrap(this.request);\n        };\n    }\n    return function (...args) {\n        // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n        // the original object.\n        return wrap(func.apply(unwrap(this), args));\n    };\n}\nfunction transformCachableValue(value) {\n    if (typeof value === 'function')\n        return wrapFunction(value);\n    // This doesn't return, it just creates a 'done' promise for the transaction,\n    // which is later returned for transaction.done (see idbObjectHandler).\n    if (value instanceof IDBTransaction)\n        cacheDonePromiseForTransaction(value);\n    if (instanceOfAny(value, getIdbProxyableTypes()))\n        return new Proxy(value, idbProxyTraps);\n    // Return the same value back if we're not going to transform it.\n    return value;\n}\nfunction wrap(value) {\n    // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n    // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n    if (value instanceof IDBRequest)\n        return promisifyRequest(value);\n    // If we've already transformed this value before, reuse the transformed value.\n    // This is faster, but it also provides object equality.\n    if (transformCache.has(value))\n        return transformCache.get(value);\n    const newValue = transformCachableValue(value);\n    // Not all types are transformed.\n    // These may be primitive types, so they can't be WeakMap keys.\n    if (newValue !== value) {\n        transformCache.set(value, newValue);\n        reverseTransformCache.set(newValue, value);\n    }\n    return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n    const request = indexedDB.open(name, version);\n    const openPromise = wrap(request);\n    if (upgrade) {\n        request.addEventListener('upgradeneeded', (event) => {\n            upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n        });\n    }\n    if (blocked) {\n        request.addEventListener('blocked', (event) => blocked(\n        // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n        event.oldVersion, event.newVersion, event));\n    }\n    openPromise\n        .then((db) => {\n        if (terminated)\n            db.addEventListener('close', () => terminated());\n        if (blocking) {\n            db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n        }\n    })\n        .catch(() => { });\n    return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n    const request = indexedDB.deleteDatabase(name);\n    if (blocked) {\n        request.addEventListener('blocked', (event) => blocked(\n        // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n        event.oldVersion, event));\n    }\n    return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n    if (!(target instanceof IDBDatabase &&\n        !(prop in target) &&\n        typeof prop === 'string')) {\n        return;\n    }\n    if (cachedMethods.get(prop))\n        return cachedMethods.get(prop);\n    const targetFuncName = prop.replace(/FromIndex$/, '');\n    const useIndex = prop !== targetFuncName;\n    const isWrite = writeMethods.includes(targetFuncName);\n    if (\n    // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n    !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n        !(isWrite || readMethods.includes(targetFuncName))) {\n        return;\n    }\n    const method = async function (storeName, ...args) {\n        // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n        const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n        let target = tx.store;\n        if (useIndex)\n            target = target.index(args.shift());\n        // Must reject if op rejects.\n        // If it's a write operation, must reject if tx.done rejects.\n        // Must reject with op rejection first.\n        // Must resolve with op value.\n        // Must handle both promises (no unhandled rejections)\n        return (await Promise.all([\n            target[targetFuncName](...args),\n            isWrite && tx.done,\n        ]))[0];\n    };\n    cachedMethods.set(prop, method);\n    return method;\n}\nreplaceTraps((oldTraps) => ({\n    ...oldTraps,\n    get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n    has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nconst advanceMethodProps = ['continue', 'continuePrimaryKey', 'advance'];\nconst methodMap = {};\nconst advanceResults = new WeakMap();\nconst ittrProxiedCursorToOriginalProxy = new WeakMap();\nconst cursorIteratorTraps = {\n    get(target, prop) {\n        if (!advanceMethodProps.includes(prop))\n            return target[prop];\n        let cachedFunc = methodMap[prop];\n        if (!cachedFunc) {\n            cachedFunc = methodMap[prop] = function (...args) {\n                advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args));\n            };\n        }\n        return cachedFunc;\n    },\n};\nasync function* iterate(...args) {\n    // tslint:disable-next-line:no-this-assignment\n    let cursor = this;\n    if (!(cursor instanceof IDBCursor)) {\n        cursor = await cursor.openCursor(...args);\n    }\n    if (!cursor)\n        return;\n    cursor = cursor;\n    const proxiedCursor = new Proxy(cursor, cursorIteratorTraps);\n    ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor);\n    // Map this double-proxy back to the original, so other cursor methods work.\n    reverseTransformCache.set(proxiedCursor, unwrap(cursor));\n    while (cursor) {\n        yield proxiedCursor;\n        // If one of the advancing methods was not called, call continue().\n        cursor = await (advanceResults.get(proxiedCursor) || cursor.continue());\n        advanceResults.delete(proxiedCursor);\n    }\n}\nfunction isIteratorProp(target, prop) {\n    return ((prop === Symbol.asyncIterator &&\n        instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor])) ||\n        (prop === 'iterate' && instanceOfAny(target, [IDBIndex, IDBObjectStore])));\n}\nreplaceTraps((oldTraps) => ({\n    ...oldTraps,\n    get(target, prop, receiver) {\n        if (isIteratorProp(target, prop))\n            return iterate;\n        return oldTraps.get(target, prop, receiver);\n    },\n    has(target, prop) {\n        return isIteratorProp(target, prop) || oldTraps.has(target, prop);\n    },\n}));\n\nexport { deleteDB, openDB, unwrap, wrap };\n", "import { S as SerwistError, d as canConstructResponseFromBodyStream, f as finalAssertExports, l as logger, g as getFriendlyURL, D as Deferred, t as timeout, e as cacheMatchIgnoreParams, h as executeQuotaErrorCallbacks, c as cacheNames } from './waitUntil.js';\nimport { openDB } from 'idb';\n\nconst copyResponse = async (response, modifier)=>{\n    let origin = null;\n    if (response.url) {\n        const responseURL = new URL(response.url);\n        origin = responseURL.origin;\n    }\n    if (origin !== self.location.origin) {\n        throw new SerwistError(\"cross-origin-copy-response\", {\n            origin\n        });\n    }\n    const clonedResponse = response.clone();\n    const responseInit = {\n        headers: new Headers(clonedResponse.headers),\n        status: clonedResponse.status,\n        statusText: clonedResponse.statusText\n    };\n    const modifiedResponseInit = modifier ? modifier(responseInit) : responseInit;\n    const body = canConstructResponseFromBodyStream() ? clonedResponse.body : await clonedResponse.blob();\n    return new Response(body, modifiedResponseInit);\n};\n\nconst disableDevLogs = ()=>{\n    self.__WB_DISABLE_DEV_LOGS = true;\n};\n\nconst BACKGROUND_SYNC_DB_VERSION = 3;\nconst BACKGROUND_SYNC_DB_NAME = \"serwist-background-sync\";\nconst REQUEST_OBJECT_STORE_NAME = \"requests\";\nconst QUEUE_NAME_INDEX = \"queueName\";\nclass BackgroundSyncQueueDb {\n    _db = null;\n    async addEntry(entry) {\n        const db = await this.getDb();\n        const tx = db.transaction(REQUEST_OBJECT_STORE_NAME, \"readwrite\", {\n            durability: \"relaxed\"\n        });\n        await tx.store.add(entry);\n        await tx.done;\n    }\n    async getFirstEntryId() {\n        const db = await this.getDb();\n        const cursor = await db.transaction(REQUEST_OBJECT_STORE_NAME).store.openCursor();\n        return cursor?.value.id;\n    }\n    async getAllEntriesByQueueName(queueName) {\n        const db = await this.getDb();\n        const results = await db.getAllFromIndex(REQUEST_OBJECT_STORE_NAME, QUEUE_NAME_INDEX, IDBKeyRange.only(queueName));\n        return results ? results : [];\n    }\n    async getEntryCountByQueueName(queueName) {\n        const db = await this.getDb();\n        return db.countFromIndex(REQUEST_OBJECT_STORE_NAME, QUEUE_NAME_INDEX, IDBKeyRange.only(queueName));\n    }\n    async deleteEntry(id) {\n        const db = await this.getDb();\n        await db.delete(REQUEST_OBJECT_STORE_NAME, id);\n    }\n    async getFirstEntryByQueueName(queueName) {\n        return await this.getEndEntryFromIndex(IDBKeyRange.only(queueName), \"next\");\n    }\n    async getLastEntryByQueueName(queueName) {\n        return await this.getEndEntryFromIndex(IDBKeyRange.only(queueName), \"prev\");\n    }\n    async getEndEntryFromIndex(query, direction) {\n        const db = await this.getDb();\n        const cursor = await db.transaction(REQUEST_OBJECT_STORE_NAME).store.index(QUEUE_NAME_INDEX).openCursor(query, direction);\n        return cursor?.value;\n    }\n    async getDb() {\n        if (!this._db) {\n            this._db = await openDB(BACKGROUND_SYNC_DB_NAME, BACKGROUND_SYNC_DB_VERSION, {\n                upgrade: this._upgradeDb\n            });\n        }\n        return this._db;\n    }\n    _upgradeDb(db, oldVersion) {\n        if (oldVersion > 0 && oldVersion < BACKGROUND_SYNC_DB_VERSION) {\n            if (db.objectStoreNames.contains(REQUEST_OBJECT_STORE_NAME)) {\n                db.deleteObjectStore(REQUEST_OBJECT_STORE_NAME);\n            }\n        }\n        const objStore = db.createObjectStore(REQUEST_OBJECT_STORE_NAME, {\n            autoIncrement: true,\n            keyPath: \"id\"\n        });\n        objStore.createIndex(QUEUE_NAME_INDEX, QUEUE_NAME_INDEX, {\n            unique: false\n        });\n    }\n}\n\nclass BackgroundSyncQueueStore {\n    _queueName;\n    _queueDb;\n    constructor(queueName){\n        this._queueName = queueName;\n        this._queueDb = new BackgroundSyncQueueDb();\n    }\n    async pushEntry(entry) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(entry, \"object\", {\n                moduleName: \"serwist\",\n                className: \"BackgroundSyncQueueStore\",\n                funcName: \"pushEntry\",\n                paramName: \"entry\"\n            });\n            finalAssertExports.isType(entry.requestData, \"object\", {\n                moduleName: \"serwist\",\n                className: \"BackgroundSyncQueueStore\",\n                funcName: \"pushEntry\",\n                paramName: \"entry.requestData\"\n            });\n        }\n        delete entry.id;\n        entry.queueName = this._queueName;\n        await this._queueDb.addEntry(entry);\n    }\n    async unshiftEntry(entry) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(entry, \"object\", {\n                moduleName: \"serwist\",\n                className: \"BackgroundSyncQueueStore\",\n                funcName: \"unshiftEntry\",\n                paramName: \"entry\"\n            });\n            finalAssertExports.isType(entry.requestData, \"object\", {\n                moduleName: \"serwist\",\n                className: \"BackgroundSyncQueueStore\",\n                funcName: \"unshiftEntry\",\n                paramName: \"entry.requestData\"\n            });\n        }\n        const firstId = await this._queueDb.getFirstEntryId();\n        if (firstId) {\n            entry.id = firstId - 1;\n        } else {\n            delete entry.id;\n        }\n        entry.queueName = this._queueName;\n        await this._queueDb.addEntry(entry);\n    }\n    async popEntry() {\n        return this._removeEntry(await this._queueDb.getLastEntryByQueueName(this._queueName));\n    }\n    async shiftEntry() {\n        return this._removeEntry(await this._queueDb.getFirstEntryByQueueName(this._queueName));\n    }\n    async getAll() {\n        return await this._queueDb.getAllEntriesByQueueName(this._queueName);\n    }\n    async size() {\n        return await this._queueDb.getEntryCountByQueueName(this._queueName);\n    }\n    async deleteEntry(id) {\n        await this._queueDb.deleteEntry(id);\n    }\n    async _removeEntry(entry) {\n        if (entry) {\n            await this.deleteEntry(entry.id);\n        }\n        return entry;\n    }\n}\n\nconst serializableProperties = [\n    \"method\",\n    \"referrer\",\n    \"referrerPolicy\",\n    \"mode\",\n    \"credentials\",\n    \"cache\",\n    \"redirect\",\n    \"integrity\",\n    \"keepalive\"\n];\nclass StorableRequest {\n    _requestData;\n    static async fromRequest(request) {\n        const requestData = {\n            url: request.url,\n            headers: {}\n        };\n        if (request.method !== \"GET\") {\n            requestData.body = await request.clone().arrayBuffer();\n        }\n        request.headers.forEach((value, key)=>{\n            requestData.headers[key] = value;\n        });\n        for (const prop of serializableProperties){\n            if (request[prop] !== undefined) {\n                requestData[prop] = request[prop];\n            }\n        }\n        return new StorableRequest(requestData);\n    }\n    constructor(requestData){\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(requestData, \"object\", {\n                moduleName: \"serwist\",\n                className: \"StorableRequest\",\n                funcName: \"constructor\",\n                paramName: \"requestData\"\n            });\n            finalAssertExports.isType(requestData.url, \"string\", {\n                moduleName: \"serwist\",\n                className: \"StorableRequest\",\n                funcName: \"constructor\",\n                paramName: \"requestData.url\"\n            });\n        }\n        if (requestData.mode === \"navigate\") {\n            requestData.mode = \"same-origin\";\n        }\n        this._requestData = requestData;\n    }\n    toObject() {\n        const requestData = Object.assign({}, this._requestData);\n        requestData.headers = Object.assign({}, this._requestData.headers);\n        if (requestData.body) {\n            requestData.body = requestData.body.slice(0);\n        }\n        return requestData;\n    }\n    toRequest() {\n        return new Request(this._requestData.url, this._requestData);\n    }\n    clone() {\n        return new StorableRequest(this.toObject());\n    }\n}\n\nconst TAG_PREFIX = \"serwist-background-sync\";\nconst MAX_RETENTION_TIME = 60 * 24 * 7;\nconst queueNames = new Set();\nconst convertEntry = (queueStoreEntry)=>{\n    const queueEntry = {\n        request: new StorableRequest(queueStoreEntry.requestData).toRequest(),\n        timestamp: queueStoreEntry.timestamp\n    };\n    if (queueStoreEntry.metadata) {\n        queueEntry.metadata = queueStoreEntry.metadata;\n    }\n    return queueEntry;\n};\nclass BackgroundSyncQueue {\n    _name;\n    _onSync;\n    _maxRetentionTime;\n    _queueStore;\n    _forceSyncFallback;\n    _syncInProgress = false;\n    _requestsAddedDuringSync = false;\n    constructor(name, { forceSyncFallback, onSync, maxRetentionTime } = {}){\n        if (queueNames.has(name)) {\n            throw new SerwistError(\"duplicate-queue-name\", {\n                name\n            });\n        }\n        queueNames.add(name);\n        this._name = name;\n        this._onSync = onSync || this.replayRequests;\n        this._maxRetentionTime = maxRetentionTime || MAX_RETENTION_TIME;\n        this._forceSyncFallback = Boolean(forceSyncFallback);\n        this._queueStore = new BackgroundSyncQueueStore(this._name);\n        this._addSyncListener();\n    }\n    get name() {\n        return this._name;\n    }\n    async pushRequest(entry) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(entry, \"object\", {\n                moduleName: \"serwist\",\n                className: \"BackgroundSyncQueue\",\n                funcName: \"pushRequest\",\n                paramName: \"entry\"\n            });\n            finalAssertExports.isInstance(entry.request, Request, {\n                moduleName: \"serwist\",\n                className: \"BackgroundSyncQueue\",\n                funcName: \"pushRequest\",\n                paramName: \"entry.request\"\n            });\n        }\n        await this._addRequest(entry, \"push\");\n    }\n    async unshiftRequest(entry) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(entry, \"object\", {\n                moduleName: \"serwist\",\n                className: \"BackgroundSyncQueue\",\n                funcName: \"unshiftRequest\",\n                paramName: \"entry\"\n            });\n            finalAssertExports.isInstance(entry.request, Request, {\n                moduleName: \"serwist\",\n                className: \"BackgroundSyncQueue\",\n                funcName: \"unshiftRequest\",\n                paramName: \"entry.request\"\n            });\n        }\n        await this._addRequest(entry, \"unshift\");\n    }\n    async popRequest() {\n        return this._removeRequest(\"pop\");\n    }\n    async shiftRequest() {\n        return this._removeRequest(\"shift\");\n    }\n    async getAll() {\n        const allEntries = await this._queueStore.getAll();\n        const now = Date.now();\n        const unexpiredEntries = [];\n        for (const entry of allEntries){\n            const maxRetentionTimeInMs = this._maxRetentionTime * 60 * 1000;\n            if (now - entry.timestamp > maxRetentionTimeInMs) {\n                await this._queueStore.deleteEntry(entry.id);\n            } else {\n                unexpiredEntries.push(convertEntry(entry));\n            }\n        }\n        return unexpiredEntries;\n    }\n    async size() {\n        return await this._queueStore.size();\n    }\n    async _addRequest({ request, metadata, timestamp = Date.now() }, operation) {\n        const storableRequest = await StorableRequest.fromRequest(request.clone());\n        const entry = {\n            requestData: storableRequest.toObject(),\n            timestamp\n        };\n        if (metadata) {\n            entry.metadata = metadata;\n        }\n        switch(operation){\n            case \"push\":\n                await this._queueStore.pushEntry(entry);\n                break;\n            case \"unshift\":\n                await this._queueStore.unshiftEntry(entry);\n                break;\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.log(`Request for '${getFriendlyURL(request.url)}' has ` + `been added to background sync queue '${this._name}'.`);\n        }\n        if (this._syncInProgress) {\n            this._requestsAddedDuringSync = true;\n        } else {\n            await this.registerSync();\n        }\n    }\n    async _removeRequest(operation) {\n        const now = Date.now();\n        let entry;\n        switch(operation){\n            case \"pop\":\n                entry = await this._queueStore.popEntry();\n                break;\n            case \"shift\":\n                entry = await this._queueStore.shiftEntry();\n                break;\n        }\n        if (entry) {\n            const maxRetentionTimeInMs = this._maxRetentionTime * 60 * 1000;\n            if (now - entry.timestamp > maxRetentionTimeInMs) {\n                return this._removeRequest(operation);\n            }\n            return convertEntry(entry);\n        }\n        return undefined;\n    }\n    async replayRequests() {\n        let entry;\n        while(entry = await this.shiftRequest()){\n            try {\n                await fetch(entry.request.clone());\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.log(`Request for '${getFriendlyURL(entry.request.url)}' ` + `has been replayed in queue '${this._name}'`);\n                }\n            } catch  {\n                await this.unshiftRequest(entry);\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.log(`Request for '${getFriendlyURL(entry.request.url)}' ` + `failed to replay, putting it back in queue '${this._name}'`);\n                }\n                throw new SerwistError(\"queue-replay-failed\", {\n                    name: this._name\n                });\n            }\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.log(`All requests in queue '${this.name}' have successfully replayed; the queue is now empty!`);\n        }\n    }\n    async registerSync() {\n        if (\"sync\" in self.registration && !this._forceSyncFallback) {\n            try {\n                await self.registration.sync.register(`${TAG_PREFIX}:${this._name}`);\n            } catch (err) {\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.warn(`Unable to register sync event for '${this._name}'.`, err);\n                }\n            }\n        }\n    }\n    _addSyncListener() {\n        if (\"sync\" in self.registration && !this._forceSyncFallback) {\n            self.addEventListener(\"sync\", (event)=>{\n                if (event.tag === `${TAG_PREFIX}:${this._name}`) {\n                    if (process.env.NODE_ENV !== \"production\") {\n                        logger.log(`Background sync for tag '${event.tag}' has been received`);\n                    }\n                    const syncComplete = async ()=>{\n                        this._syncInProgress = true;\n                        let syncError;\n                        try {\n                            await this._onSync({\n                                queue: this\n                            });\n                        } catch (error) {\n                            if (error instanceof Error) {\n                                syncError = error;\n                                throw syncError;\n                            }\n                        } finally{\n                            if (this._requestsAddedDuringSync && !(syncError && !event.lastChance)) {\n                                await this.registerSync();\n                            }\n                            this._syncInProgress = false;\n                            this._requestsAddedDuringSync = false;\n                        }\n                    };\n                    event.waitUntil(syncComplete());\n                }\n            });\n        } else {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.log(\"Background sync replaying without background sync event\");\n            }\n            void this._onSync({\n                queue: this\n            });\n        }\n    }\n    static get _queueNames() {\n        return queueNames;\n    }\n}\n\nclass BackgroundSyncPlugin {\n    _queue;\n    constructor(name, options){\n        this._queue = new BackgroundSyncQueue(name, options);\n    }\n    async fetchDidFail({ request }) {\n        await this._queue.pushRequest({\n            request\n        });\n    }\n}\n\nconst cacheOkAndOpaquePlugin = {\n    cacheWillUpdate: async ({ response })=>{\n        if (response.status === 200 || response.status === 0) {\n            return response;\n        }\n        return null;\n    }\n};\n\nfunction toRequest(input) {\n    return typeof input === \"string\" ? new Request(input) : input;\n}\nclass StrategyHandler {\n    event;\n    request;\n    url;\n    params;\n    _cacheKeys = {};\n    _strategy;\n    _handlerDeferred;\n    _extendLifetimePromises;\n    _plugins;\n    _pluginStateMap;\n    constructor(strategy, options){\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(options.event, ExtendableEvent, {\n                moduleName: \"serwist\",\n                className: \"StrategyHandler\",\n                funcName: \"constructor\",\n                paramName: \"options.event\"\n            });\n            finalAssertExports.isInstance(options.request, Request, {\n                moduleName: \"serwist\",\n                className: \"StrategyHandler\",\n                funcName: \"constructor\",\n                paramName: \"options.request\"\n            });\n        }\n        this.event = options.event;\n        this.request = options.request;\n        if (options.url) {\n            this.url = options.url;\n            this.params = options.params;\n        }\n        this._strategy = strategy;\n        this._handlerDeferred = new Deferred();\n        this._extendLifetimePromises = [];\n        this._plugins = [\n            ...strategy.plugins\n        ];\n        this._pluginStateMap = new Map();\n        for (const plugin of this._plugins){\n            this._pluginStateMap.set(plugin, {});\n        }\n        this.event.waitUntil(this._handlerDeferred.promise);\n    }\n    async fetch(input) {\n        const { event } = this;\n        let request = toRequest(input);\n        const preloadResponse = await this.getPreloadResponse();\n        if (preloadResponse) {\n            return preloadResponse;\n        }\n        const originalRequest = this.hasCallback(\"fetchDidFail\") ? request.clone() : null;\n        try {\n            for (const cb of this.iterateCallbacks(\"requestWillFetch\")){\n                request = await cb({\n                    request: request.clone(),\n                    event\n                });\n            }\n        } catch (err) {\n            if (err instanceof Error) {\n                throw new SerwistError(\"plugin-error-request-will-fetch\", {\n                    thrownErrorMessage: err.message\n                });\n            }\n        }\n        const pluginFilteredRequest = request.clone();\n        try {\n            let fetchResponse;\n            fetchResponse = await fetch(request, request.mode === \"navigate\" ? undefined : this._strategy.fetchOptions);\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.debug(`Network request for '${getFriendlyURL(request.url)}' returned a response with status '${fetchResponse.status}'.`);\n            }\n            for (const callback of this.iterateCallbacks(\"fetchDidSucceed\")){\n                fetchResponse = await callback({\n                    event,\n                    request: pluginFilteredRequest,\n                    response: fetchResponse\n                });\n            }\n            return fetchResponse;\n        } catch (error) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.log(`Network request for '${getFriendlyURL(request.url)}' threw an error.`, error);\n            }\n            if (originalRequest) {\n                await this.runCallbacks(\"fetchDidFail\", {\n                    error: error,\n                    event,\n                    originalRequest: originalRequest.clone(),\n                    request: pluginFilteredRequest.clone()\n                });\n            }\n            throw error;\n        }\n    }\n    async fetchAndCachePut(input) {\n        const response = await this.fetch(input);\n        const responseClone = response.clone();\n        void this.waitUntil(this.cachePut(input, responseClone));\n        return response;\n    }\n    async cacheMatch(key) {\n        const request = toRequest(key);\n        let cachedResponse;\n        const { cacheName, matchOptions } = this._strategy;\n        const effectiveRequest = await this.getCacheKey(request, \"read\");\n        const multiMatchOptions = {\n            ...matchOptions,\n            ...{\n                cacheName\n            }\n        };\n        cachedResponse = await caches.match(effectiveRequest, multiMatchOptions);\n        if (process.env.NODE_ENV !== \"production\") {\n            if (cachedResponse) {\n                logger.debug(`Found a cached response in '${cacheName}'.`);\n            } else {\n                logger.debug(`No cached response found in '${cacheName}'.`);\n            }\n        }\n        for (const callback of this.iterateCallbacks(\"cachedResponseWillBeUsed\")){\n            cachedResponse = await callback({\n                cacheName,\n                matchOptions,\n                cachedResponse,\n                request: effectiveRequest,\n                event: this.event\n            }) || undefined;\n        }\n        return cachedResponse;\n    }\n    async cachePut(key, response) {\n        const request = toRequest(key);\n        await timeout(0);\n        const effectiveRequest = await this.getCacheKey(request, \"write\");\n        if (process.env.NODE_ENV !== \"production\") {\n            if (effectiveRequest.method && effectiveRequest.method !== \"GET\") {\n                throw new SerwistError(\"attempt-to-cache-non-get-request\", {\n                    url: getFriendlyURL(effectiveRequest.url),\n                    method: effectiveRequest.method\n                });\n            }\n        }\n        if (!response) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.error(`Cannot cache non-existent response for '${getFriendlyURL(effectiveRequest.url)}'.`);\n            }\n            throw new SerwistError(\"cache-put-with-no-response\", {\n                url: getFriendlyURL(effectiveRequest.url)\n            });\n        }\n        const responseToCache = await this._ensureResponseSafeToCache(response);\n        if (!responseToCache) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.debug(`Response '${getFriendlyURL(effectiveRequest.url)}' will not be cached.`, responseToCache);\n            }\n            return false;\n        }\n        const { cacheName, matchOptions } = this._strategy;\n        const cache = await self.caches.open(cacheName);\n        if (process.env.NODE_ENV !== \"production\") {\n            const vary = response.headers.get(\"Vary\");\n            if (vary && matchOptions?.ignoreVary !== true) {\n                logger.debug(`The response for ${getFriendlyURL(effectiveRequest.url)} has a 'Vary: ${vary}' header. Consider setting the {ignoreVary: true} option on your strategy to ensure cache matching and deletion works as expected.`);\n            }\n        }\n        const hasCacheUpdateCallback = this.hasCallback(\"cacheDidUpdate\");\n        const oldResponse = hasCacheUpdateCallback ? await cacheMatchIgnoreParams(cache, effectiveRequest.clone(), [\n            \"__WB_REVISION__\"\n        ], matchOptions) : null;\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.debug(`Updating the '${cacheName}' cache with a new Response for ${getFriendlyURL(effectiveRequest.url)}.`);\n        }\n        try {\n            await cache.put(effectiveRequest, hasCacheUpdateCallback ? responseToCache.clone() : responseToCache);\n        } catch (error) {\n            if (error instanceof Error) {\n                if (error.name === \"QuotaExceededError\") {\n                    await executeQuotaErrorCallbacks();\n                }\n                throw error;\n            }\n        }\n        for (const callback of this.iterateCallbacks(\"cacheDidUpdate\")){\n            await callback({\n                cacheName,\n                oldResponse,\n                newResponse: responseToCache.clone(),\n                request: effectiveRequest,\n                event: this.event\n            });\n        }\n        return true;\n    }\n    async getCacheKey(request, mode) {\n        const key = `${request.url} | ${mode}`;\n        if (!this._cacheKeys[key]) {\n            let effectiveRequest = request;\n            for (const callback of this.iterateCallbacks(\"cacheKeyWillBeUsed\")){\n                effectiveRequest = toRequest(await callback({\n                    mode,\n                    request: effectiveRequest,\n                    event: this.event,\n                    params: this.params\n                }));\n            }\n            this._cacheKeys[key] = effectiveRequest;\n        }\n        return this._cacheKeys[key];\n    }\n    hasCallback(name) {\n        for (const plugin of this._strategy.plugins){\n            if (name in plugin) {\n                return true;\n            }\n        }\n        return false;\n    }\n    async runCallbacks(name, param) {\n        for (const callback of this.iterateCallbacks(name)){\n            await callback(param);\n        }\n    }\n    *iterateCallbacks(name) {\n        for (const plugin of this._strategy.plugins){\n            if (typeof plugin[name] === \"function\") {\n                const state = this._pluginStateMap.get(plugin);\n                const statefulCallback = (param)=>{\n                    const statefulParam = {\n                        ...param,\n                        state\n                    };\n                    return plugin[name](statefulParam);\n                };\n                yield statefulCallback;\n            }\n        }\n    }\n    waitUntil(promise) {\n        this._extendLifetimePromises.push(promise);\n        return promise;\n    }\n    async doneWaiting() {\n        let promise;\n        while(promise = this._extendLifetimePromises.shift()){\n            await promise;\n        }\n    }\n    destroy() {\n        this._handlerDeferred.resolve(null);\n    }\n    async getPreloadResponse() {\n        if (this.event instanceof FetchEvent && this.event.request.mode === \"navigate\" && \"preloadResponse\" in this.event) {\n            try {\n                const possiblePreloadResponse = await this.event.preloadResponse;\n                if (possiblePreloadResponse) {\n                    if (process.env.NODE_ENV !== \"production\") {\n                        logger.log(`Using a preloaded navigation response for '${getFriendlyURL(this.event.request.url)}'`);\n                    }\n                    return possiblePreloadResponse;\n                }\n            } catch (error) {\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.error(error);\n                }\n                return undefined;\n            }\n        }\n        return undefined;\n    }\n    async _ensureResponseSafeToCache(response) {\n        let responseToCache = response;\n        let pluginsUsed = false;\n        for (const callback of this.iterateCallbacks(\"cacheWillUpdate\")){\n            responseToCache = await callback({\n                request: this.request,\n                response: responseToCache,\n                event: this.event\n            }) || undefined;\n            pluginsUsed = true;\n            if (!responseToCache) {\n                break;\n            }\n        }\n        if (!pluginsUsed) {\n            if (responseToCache && responseToCache.status !== 200) {\n                if (process.env.NODE_ENV !== \"production\") {\n                    if (responseToCache.status === 0) {\n                        logger.warn(`The response for '${this.request.url}' is an opaque response. The caching strategy that you're using will not cache opaque responses by default.`);\n                    } else {\n                        logger.debug(`The response for '${this.request.url}' returned a status code of '${response.status}' and won't be cached as a result.`);\n                    }\n                }\n                responseToCache = undefined;\n            }\n        }\n        return responseToCache;\n    }\n}\n\nclass Strategy {\n    cacheName;\n    plugins;\n    fetchOptions;\n    matchOptions;\n    constructor(options = {}){\n        this.cacheName = cacheNames.getRuntimeName(options.cacheName);\n        this.plugins = options.plugins || [];\n        this.fetchOptions = options.fetchOptions;\n        this.matchOptions = options.matchOptions;\n    }\n    handle(options) {\n        const [responseDone] = this.handleAll(options);\n        return responseDone;\n    }\n    handleAll(options) {\n        if (options instanceof FetchEvent) {\n            options = {\n                event: options,\n                request: options.request\n            };\n        }\n        const event = options.event;\n        const request = typeof options.request === \"string\" ? new Request(options.request) : options.request;\n        const handler = new StrategyHandler(this, options.url ? {\n            event,\n            request,\n            url: options.url,\n            params: options.params\n        } : {\n            event,\n            request\n        });\n        const responseDone = this._getResponse(handler, request, event);\n        const handlerDone = this._awaitComplete(responseDone, handler, request, event);\n        return [\n            responseDone,\n            handlerDone\n        ];\n    }\n    async _getResponse(handler, request, event) {\n        await handler.runCallbacks(\"handlerWillStart\", {\n            event,\n            request\n        });\n        let response;\n        try {\n            response = await this._handle(request, handler);\n            if (response === undefined || response.type === \"error\") {\n                throw new SerwistError(\"no-response\", {\n                    url: request.url\n                });\n            }\n        } catch (error) {\n            if (error instanceof Error) {\n                for (const callback of handler.iterateCallbacks(\"handlerDidError\")){\n                    response = await callback({\n                        error,\n                        event,\n                        request\n                    });\n                    if (response !== undefined) {\n                        break;\n                    }\n                }\n            }\n            if (!response) {\n                throw error;\n            }\n            if (process.env.NODE_ENV !== \"production\") {\n                throw logger.log(`While responding to '${getFriendlyURL(request.url)}', an ${error instanceof Error ? error.toString() : \"\"} error occurred. Using a fallback response provided by a handlerDidError plugin.`);\n            }\n        }\n        for (const callback of handler.iterateCallbacks(\"handlerWillRespond\")){\n            response = await callback({\n                event,\n                request,\n                response\n            });\n        }\n        return response;\n    }\n    async _awaitComplete(responseDone, handler, request, event) {\n        let response;\n        let error;\n        try {\n            response = await responseDone;\n        } catch  {}\n        try {\n            await handler.runCallbacks(\"handlerDidRespond\", {\n                event,\n                request,\n                response\n            });\n            await handler.doneWaiting();\n        } catch (waitUntilError) {\n            if (waitUntilError instanceof Error) {\n                error = waitUntilError;\n            }\n        }\n        await handler.runCallbacks(\"handlerDidComplete\", {\n            event,\n            request,\n            response,\n            error\n        });\n        handler.destroy();\n        if (error) {\n            throw error;\n        }\n    }\n}\n\nconst messages = {\n    strategyStart: (strategyName, request)=>`Using ${strategyName} to respond to '${getFriendlyURL(request.url)}'`,\n    printFinalResponse: (response)=>{\n        if (response) {\n            logger.groupCollapsed(\"View the final response here.\");\n            logger.log(response || \"[No response returned]\");\n            logger.groupEnd();\n        }\n    }\n};\n\nclass NetworkFirst extends Strategy {\n    _networkTimeoutSeconds;\n    constructor(options = {}){\n        super(options);\n        if (!this.plugins.some((p)=>\"cacheWillUpdate\" in p)) {\n            this.plugins.unshift(cacheOkAndOpaquePlugin);\n        }\n        this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n        if (process.env.NODE_ENV !== \"production\") {\n            if (this._networkTimeoutSeconds) {\n                finalAssertExports.isType(this._networkTimeoutSeconds, \"number\", {\n                    moduleName: \"serwist\",\n                    className: this.constructor.name,\n                    funcName: \"constructor\",\n                    paramName: \"networkTimeoutSeconds\"\n                });\n            }\n        }\n    }\n    async _handle(request, handler) {\n        const logs = [];\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(request, Request, {\n                moduleName: \"serwist\",\n                className: this.constructor.name,\n                funcName: \"handle\",\n                paramName: \"makeRequest\"\n            });\n        }\n        const promises = [];\n        let timeoutId;\n        if (this._networkTimeoutSeconds) {\n            const { id, promise } = this._getTimeoutPromise({\n                request,\n                logs,\n                handler\n            });\n            timeoutId = id;\n            promises.push(promise);\n        }\n        const networkPromise = this._getNetworkPromise({\n            timeoutId,\n            request,\n            logs,\n            handler\n        });\n        promises.push(networkPromise);\n        const response = await handler.waitUntil((async ()=>{\n            return await handler.waitUntil(Promise.race(promises)) || await networkPromise;\n        })());\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n            for (const log of logs){\n                logger.log(log);\n            }\n            messages.printFinalResponse(response);\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new SerwistError(\"no-response\", {\n                url: request.url\n            });\n        }\n        return response;\n    }\n    _getTimeoutPromise({ request, logs, handler }) {\n        let timeoutId;\n        const timeoutPromise = new Promise((resolve)=>{\n            const onNetworkTimeout = async ()=>{\n                if (process.env.NODE_ENV !== \"production\") {\n                    logs.push(`Timing out the network response at ${this._networkTimeoutSeconds} seconds.`);\n                }\n                resolve(await handler.cacheMatch(request));\n            };\n            timeoutId = setTimeout(onNetworkTimeout, this._networkTimeoutSeconds * 1000);\n        });\n        return {\n            promise: timeoutPromise,\n            id: timeoutId\n        };\n    }\n    async _getNetworkPromise({ timeoutId, request, logs, handler }) {\n        let error;\n        let response;\n        try {\n            response = await handler.fetchAndCachePut(request);\n        } catch (fetchError) {\n            if (fetchError instanceof Error) {\n                error = fetchError;\n            }\n        }\n        if (timeoutId) {\n            clearTimeout(timeoutId);\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            if (response) {\n                logs.push(\"Got response from network.\");\n            } else {\n                logs.push(\"Unable to get a response from the network. Will respond \" + \"with a cached response.\");\n            }\n        }\n        if (error || !response) {\n            response = await handler.cacheMatch(request);\n            if (process.env.NODE_ENV !== \"production\") {\n                if (response) {\n                    logs.push(`Found a cached response in the '${this.cacheName}' cache.`);\n                } else {\n                    logs.push(`No response found in the '${this.cacheName}' cache.`);\n                }\n            }\n        }\n        return response;\n    }\n}\n\nclass NetworkOnly extends Strategy {\n    _networkTimeoutSeconds;\n    constructor(options = {}){\n        super(options);\n        this._networkTimeoutSeconds = options.networkTimeoutSeconds || 0;\n    }\n    async _handle(request, handler) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(request, Request, {\n                moduleName: \"serwist\",\n                className: this.constructor.name,\n                funcName: \"_handle\",\n                paramName: \"request\"\n            });\n        }\n        let error;\n        let response;\n        try {\n            const promises = [\n                handler.fetch(request)\n            ];\n            if (this._networkTimeoutSeconds) {\n                const timeoutPromise = timeout(this._networkTimeoutSeconds * 1000);\n                promises.push(timeoutPromise);\n            }\n            response = await Promise.race(promises);\n            if (!response) {\n                throw new Error(`Timed out the network response after ${this._networkTimeoutSeconds} seconds.`);\n            }\n        } catch (err) {\n            if (err instanceof Error) {\n                error = err;\n            }\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n            if (response) {\n                logger.log(\"Got response from network.\");\n            } else {\n                logger.log(\"Unable to get a response from the network.\");\n            }\n            messages.printFinalResponse(response);\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new SerwistError(\"no-response\", {\n                url: request.url,\n                error\n            });\n        }\n        return response;\n    }\n}\n\nconst defaultMethod = \"GET\";\nconst validMethods = [\n    \"DELETE\",\n    \"GET\",\n    \"HEAD\",\n    \"PATCH\",\n    \"POST\",\n    \"PUT\"\n];\n\nconst normalizeHandler = (handler)=>{\n    if (handler && typeof handler === \"object\") {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.hasMethod(handler, \"handle\", {\n                moduleName: \"serwist\",\n                className: \"Route\",\n                funcName: \"constructor\",\n                paramName: \"handler\"\n            });\n        }\n        return handler;\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n        finalAssertExports.isType(handler, \"function\", {\n            moduleName: \"serwist\",\n            className: \"Route\",\n            funcName: \"constructor\",\n            paramName: \"handler\"\n        });\n    }\n    return {\n        handle: handler\n    };\n};\n\nclass Route {\n    handler;\n    match;\n    method;\n    catchHandler;\n    constructor(match, handler, method = defaultMethod){\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(match, \"function\", {\n                moduleName: \"serwist\",\n                className: \"Route\",\n                funcName: \"constructor\",\n                paramName: \"match\"\n            });\n            if (method) {\n                finalAssertExports.isOneOf(method, validMethods, {\n                    paramName: \"method\"\n                });\n            }\n        }\n        this.handler = normalizeHandler(handler);\n        this.match = match;\n        this.method = method;\n    }\n    setCatchHandler(handler) {\n        this.catchHandler = normalizeHandler(handler);\n    }\n}\n\nclass PrecacheStrategy extends Strategy {\n    _fallbackToNetwork;\n    static defaultPrecacheCacheabilityPlugin = {\n        async cacheWillUpdate ({ response }) {\n            if (!response || response.status >= 400) {\n                return null;\n            }\n            return response;\n        }\n    };\n    static copyRedirectedCacheableResponsesPlugin = {\n        async cacheWillUpdate ({ response }) {\n            return response.redirected ? await copyResponse(response) : response;\n        }\n    };\n    constructor(options = {}){\n        options.cacheName = cacheNames.getPrecacheName(options.cacheName);\n        super(options);\n        this._fallbackToNetwork = options.fallbackToNetwork !== false;\n        this.plugins.push(PrecacheStrategy.copyRedirectedCacheableResponsesPlugin);\n    }\n    async _handle(request, handler) {\n        const preloadResponse = await handler.getPreloadResponse();\n        if (preloadResponse) {\n            return preloadResponse;\n        }\n        const response = await handler.cacheMatch(request);\n        if (response) {\n            return response;\n        }\n        if (handler.event && handler.event.type === \"install\") {\n            return await this._handleInstall(request, handler);\n        }\n        return await this._handleFetch(request, handler);\n    }\n    async _handleFetch(request, handler) {\n        let response;\n        const params = handler.params || {};\n        if (this._fallbackToNetwork) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.warn(`The precached response for ${getFriendlyURL(request.url)} in ${this.cacheName} was not found. Falling back to the network.`);\n            }\n            const integrityInManifest = params.integrity;\n            const integrityInRequest = request.integrity;\n            const noIntegrityConflict = !integrityInRequest || integrityInRequest === integrityInManifest;\n            response = await handler.fetch(new Request(request, {\n                integrity: request.mode !== \"no-cors\" ? integrityInRequest || integrityInManifest : undefined\n            }));\n            if (integrityInManifest && noIntegrityConflict && request.mode !== \"no-cors\") {\n                this._useDefaultCacheabilityPluginIfNeeded();\n                const wasCached = await handler.cachePut(request, response.clone());\n                if (process.env.NODE_ENV !== \"production\") {\n                    if (wasCached) {\n                        logger.log(`A response for ${getFriendlyURL(request.url)} was used to \"repair\" the precache.`);\n                    }\n                }\n            }\n        } else {\n            throw new SerwistError(\"missing-precache-entry\", {\n                cacheName: this.cacheName,\n                url: request.url\n            });\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            const cacheKey = params.cacheKey || await handler.getCacheKey(request, \"read\");\n            logger.groupCollapsed(`Precaching is responding to: ${getFriendlyURL(request.url)}`);\n            logger.log(`Serving the precached url: ${getFriendlyURL(cacheKey instanceof Request ? cacheKey.url : cacheKey)}`);\n            logger.groupCollapsed(\"View request details here.\");\n            logger.log(request);\n            logger.groupEnd();\n            logger.groupCollapsed(\"View response details here.\");\n            logger.log(response);\n            logger.groupEnd();\n            logger.groupEnd();\n        }\n        return response;\n    }\n    async _handleInstall(request, handler) {\n        this._useDefaultCacheabilityPluginIfNeeded();\n        const response = await handler.fetch(request);\n        const wasCached = await handler.cachePut(request, response.clone());\n        if (!wasCached) {\n            throw new SerwistError(\"bad-precaching-response\", {\n                url: request.url,\n                status: response.status\n            });\n        }\n        return response;\n    }\n    _useDefaultCacheabilityPluginIfNeeded() {\n        let defaultPluginIndex = null;\n        let cacheWillUpdatePluginCount = 0;\n        for (const [index, plugin] of this.plugins.entries()){\n            if (plugin === PrecacheStrategy.copyRedirectedCacheableResponsesPlugin) {\n                continue;\n            }\n            if (plugin === PrecacheStrategy.defaultPrecacheCacheabilityPlugin) {\n                defaultPluginIndex = index;\n            }\n            if (plugin.cacheWillUpdate) {\n                cacheWillUpdatePluginCount++;\n            }\n        }\n        if (cacheWillUpdatePluginCount === 0) {\n            this.plugins.push(PrecacheStrategy.defaultPrecacheCacheabilityPlugin);\n        } else if (cacheWillUpdatePluginCount > 1 && defaultPluginIndex !== null) {\n            this.plugins.splice(defaultPluginIndex, 1);\n        }\n    }\n}\n\nclass NavigationRoute extends Route {\n    _allowlist;\n    _denylist;\n    constructor(handler, { allowlist = [\n        /./\n    ], denylist = [] } = {}){\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isArrayOfClass(allowlist, RegExp, {\n                moduleName: \"serwist\",\n                className: \"NavigationRoute\",\n                funcName: \"constructor\",\n                paramName: \"options.allowlist\"\n            });\n            finalAssertExports.isArrayOfClass(denylist, RegExp, {\n                moduleName: \"serwist\",\n                className: \"NavigationRoute\",\n                funcName: \"constructor\",\n                paramName: \"options.denylist\"\n            });\n        }\n        super((options)=>this._match(options), handler);\n        this._allowlist = allowlist;\n        this._denylist = denylist;\n    }\n    _match({ url, request }) {\n        if (request && request.mode !== \"navigate\") {\n            return false;\n        }\n        const pathnameAndSearch = url.pathname + url.search;\n        for (const regExp of this._denylist){\n            if (regExp.test(pathnameAndSearch)) {\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.log(`The navigation route ${pathnameAndSearch} is not being used, since the URL matches this denylist pattern: ${regExp.toString()}`);\n                }\n                return false;\n            }\n        }\n        if (this._allowlist.some((regExp)=>regExp.test(pathnameAndSearch))) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.debug(`The navigation route ${pathnameAndSearch} is being used.`);\n            }\n            return true;\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.log(`The navigation route ${pathnameAndSearch} is not being used, since the URL being navigated to doesn't match the allowlist.`);\n        }\n        return false;\n    }\n}\n\nconst isNavigationPreloadSupported = ()=>{\n    return Boolean(self.registration?.navigationPreload);\n};\nconst enableNavigationPreload = (headerValue)=>{\n    if (isNavigationPreloadSupported()) {\n        self.addEventListener(\"activate\", (event)=>{\n            event.waitUntil(self.registration.navigationPreload.enable().then(()=>{\n                if (headerValue) {\n                    void self.registration.navigationPreload.setHeaderValue(headerValue);\n                }\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.log(\"Navigation preloading is enabled.\");\n                }\n            }));\n        });\n    } else {\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.log(\"Navigation preloading is not supported in this browser.\");\n        }\n    }\n};\nconst disableNavigationPreload = ()=>{\n    if (isNavigationPreloadSupported()) {\n        self.addEventListener(\"activate\", (event)=>{\n            event.waitUntil(self.registration.navigationPreload.disable().then(()=>{\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.log(\"Navigation preloading is disabled.\");\n                }\n            }));\n        });\n    } else {\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.log(\"Navigation preloading is not supported in this browser.\");\n        }\n    }\n};\n\nconst removeIgnoredSearchParams = (urlObject, ignoreURLParametersMatching = [])=>{\n    for (const paramName of [\n        ...urlObject.searchParams.keys()\n    ]){\n        if (ignoreURLParametersMatching.some((regExp)=>regExp.test(paramName))) {\n            urlObject.searchParams.delete(paramName);\n        }\n    }\n    return urlObject;\n};\n\nfunction* generateURLVariations(url, { directoryIndex = \"index.html\", ignoreURLParametersMatching = [\n    /^utm_/,\n    /^fbclid$/\n], cleanURLs = true, urlManipulation } = {}) {\n    const urlObject = new URL(url, location.href);\n    urlObject.hash = \"\";\n    yield urlObject.href;\n    const urlWithoutIgnoredParams = removeIgnoredSearchParams(urlObject, ignoreURLParametersMatching);\n    yield urlWithoutIgnoredParams.href;\n    if (directoryIndex && urlWithoutIgnoredParams.pathname.endsWith(\"/\")) {\n        const directoryURL = new URL(urlWithoutIgnoredParams.href);\n        directoryURL.pathname += directoryIndex;\n        yield directoryURL.href;\n    }\n    if (cleanURLs) {\n        const cleanURL = new URL(urlWithoutIgnoredParams.href);\n        cleanURL.pathname += \".html\";\n        yield cleanURL.href;\n    }\n    if (urlManipulation) {\n        const additionalURLs = urlManipulation({\n            url: urlObject\n        });\n        for (const urlToAttempt of additionalURLs){\n            yield urlToAttempt.href;\n        }\n    }\n}\n\nclass RegExpRoute extends Route {\n    constructor(regExp, handler, method){\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(regExp, RegExp, {\n                moduleName: \"serwist\",\n                className: \"RegExpRoute\",\n                funcName: \"constructor\",\n                paramName: \"pattern\"\n            });\n        }\n        const match = ({ url })=>{\n            const result = regExp.exec(url.href);\n            if (!result) {\n                return;\n            }\n            if (url.origin !== location.origin && result.index !== 0) {\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.debug(`The regular expression '${regExp.toString()}' only partially matched against the cross-origin URL '${url.toString()}'. RegExpRoute's will only handle cross-origin requests if they match the entire URL.`);\n                }\n                return;\n            }\n            return result.slice(1);\n        };\n        super(match, handler, method);\n    }\n}\n\nconst setCacheNameDetails = (details)=>{\n    if (process.env.NODE_ENV !== \"production\") {\n        for (const key of Object.keys(details)){\n            finalAssertExports.isType(details[key], \"string\", {\n                moduleName: \"@serwist/core\",\n                funcName: \"setCacheNameDetails\",\n                paramName: `details.${key}`\n            });\n        }\n        if (details.precache?.length === 0) {\n            throw new SerwistError(\"invalid-cache-name\", {\n                cacheNameId: \"precache\",\n                value: details.precache\n            });\n        }\n        if (details.runtime?.length === 0) {\n            throw new SerwistError(\"invalid-cache-name\", {\n                cacheNameId: \"runtime\",\n                value: details.runtime\n            });\n        }\n        if (details.googleAnalytics?.length === 0) {\n            throw new SerwistError(\"invalid-cache-name\", {\n                cacheNameId: \"googleAnalytics\",\n                value: details.googleAnalytics\n            });\n        }\n    }\n    cacheNames.updateDetails(details);\n};\n\nconst REVISION_SEARCH_PARAM = \"__WB_REVISION__\";\nconst createCacheKey = (entry)=>{\n    if (!entry) {\n        throw new SerwistError(\"add-to-cache-list-unexpected-type\", {\n            entry\n        });\n    }\n    if (typeof entry === \"string\") {\n        const urlObject = new URL(entry, location.href);\n        return {\n            cacheKey: urlObject.href,\n            url: urlObject.href\n        };\n    }\n    const { revision, url } = entry;\n    if (!url) {\n        throw new SerwistError(\"add-to-cache-list-unexpected-type\", {\n            entry\n        });\n    }\n    if (!revision) {\n        const urlObject = new URL(url, location.href);\n        return {\n            cacheKey: urlObject.href,\n            url: urlObject.href\n        };\n    }\n    const cacheKeyURL = new URL(url, location.href);\n    const originalURL = new URL(url, location.href);\n    cacheKeyURL.searchParams.set(REVISION_SEARCH_PARAM, revision);\n    return {\n        cacheKey: cacheKeyURL.href,\n        url: originalURL.href\n    };\n};\n\nclass PrecacheInstallReportPlugin {\n    updatedURLs = [];\n    notUpdatedURLs = [];\n    handlerWillStart = async ({ request, state })=>{\n        if (state) {\n            state.originalRequest = request;\n        }\n    };\n    cachedResponseWillBeUsed = async ({ event, state, cachedResponse })=>{\n        if (event.type === \"install\") {\n            if (state?.originalRequest && state.originalRequest instanceof Request) {\n                const url = state.originalRequest.url;\n                if (cachedResponse) {\n                    this.notUpdatedURLs.push(url);\n                } else {\n                    this.updatedURLs.push(url);\n                }\n            }\n        }\n        return cachedResponse;\n    };\n}\n\nconst parseRoute = (capture, handler, method)=>{\n    if (typeof capture === \"string\") {\n        const captureUrl = new URL(capture, location.href);\n        if (process.env.NODE_ENV !== \"production\") {\n            if (!(capture.startsWith(\"/\") || capture.startsWith(\"http\"))) {\n                throw new SerwistError(\"invalid-string\", {\n                    moduleName: \"serwist\",\n                    funcName: \"parseRoute\",\n                    paramName: \"capture\"\n                });\n            }\n            const valueToCheck = capture.startsWith(\"http\") ? captureUrl.pathname : capture;\n            const wildcards = \"[*:?+]\";\n            if (new RegExp(`${wildcards}`).exec(valueToCheck)) {\n                logger.debug(`The '$capture' parameter contains an Express-style wildcard character (${wildcards}). Strings are now always interpreted as exact matches; use a RegExp for partial or wildcard matches.`);\n            }\n        }\n        const matchCallback = ({ url })=>{\n            if (process.env.NODE_ENV !== \"production\") {\n                if (url.pathname === captureUrl.pathname && url.origin !== captureUrl.origin) {\n                    logger.debug(`${capture} only partially matches the cross-origin URL ${url.toString()}. This route will only handle cross-origin requests if they match the entire URL.`);\n                }\n            }\n            return url.href === captureUrl.href;\n        };\n        return new Route(matchCallback, handler, method);\n    }\n    if (capture instanceof RegExp) {\n        return new RegExpRoute(capture, handler, method);\n    }\n    if (typeof capture === \"function\") {\n        return new Route(capture, handler, method);\n    }\n    if (capture instanceof Route) {\n        return capture;\n    }\n    throw new SerwistError(\"unsupported-route-type\", {\n        moduleName: \"serwist\",\n        funcName: \"parseRoute\",\n        paramName: \"capture\"\n    });\n};\n\nconst logGroup = (groupTitle, deletedURLs)=>{\n    logger.groupCollapsed(groupTitle);\n    for (const url of deletedURLs){\n        logger.log(url);\n    }\n    logger.groupEnd();\n};\nconst printCleanupDetails = (deletedURLs)=>{\n    const deletionCount = deletedURLs.length;\n    if (deletionCount > 0) {\n        logger.groupCollapsed(`During precaching cleanup, ${deletionCount} cached request${deletionCount === 1 ? \" was\" : \"s were\"} deleted.`);\n        logGroup(\"Deleted Cache Requests\", deletedURLs);\n        logger.groupEnd();\n    }\n};\n\nfunction _nestedGroup(groupTitle, urls) {\n    if (urls.length === 0) {\n        return;\n    }\n    logger.groupCollapsed(groupTitle);\n    for (const url of urls){\n        logger.log(url);\n    }\n    logger.groupEnd();\n}\nconst printInstallDetails = (urlsToPrecache, urlsAlreadyPrecached)=>{\n    const precachedCount = urlsToPrecache.length;\n    const alreadyPrecachedCount = urlsAlreadyPrecached.length;\n    if (precachedCount || alreadyPrecachedCount) {\n        let message = `Precaching ${precachedCount} file${precachedCount === 1 ? \"\" : \"s\"}.`;\n        if (alreadyPrecachedCount > 0) {\n            message += ` ${alreadyPrecachedCount} ` + `file${alreadyPrecachedCount === 1 ? \" is\" : \"s are\"} already cached.`;\n        }\n        logger.groupCollapsed(message);\n        _nestedGroup(\"View newly precached URLs.\", urlsToPrecache);\n        _nestedGroup(\"View previously precached URLs.\", urlsAlreadyPrecached);\n        logger.groupEnd();\n    }\n};\n\nexport { BackgroundSyncPlugin as B, NetworkFirst as N, PrecacheStrategy as P, Route as R, Strategy as S, NetworkOnly as a, NavigationRoute as b, cacheOkAndOpaquePlugin as c, disableDevLogs as d, enableNavigationPreload as e, createCacheKey as f, generateURLVariations as g, defaultMethod as h, PrecacheInstallReportPlugin as i, printInstallDetails as j, printCleanupDetails as k, BackgroundSyncQueue as l, messages as m, normalizeHandler as n, BackgroundSyncQueueStore as o, parseRoute as p, RegExpRoute as q, StorableRequest as r, setCacheNameDetails as s, StrategyHandler as t, copyResponse as u, disableNavigationPreload as v, isNavigationPreloadSupported as w };\n", "const nonNullable = (value)=>value !== null && value !== undefined;\n\nconst parallel = async (limit, array, func)=>{\n    const work = array.map((item, index)=>({\n            index,\n            item\n        }));\n    const processor = async (res)=>{\n        const results = [];\n        while(true){\n            const next = work.pop();\n            if (!next) {\n                return res(results);\n            }\n            const result = await func(next.item);\n            results.push({\n                result: result,\n                index: next.index\n            });\n        }\n    };\n    const queues = Array.from({\n        length: limit\n    }, ()=>new Promise(processor));\n    const results = (await Promise.all(queues)).flat().sort((a, b)=>a.index < b.index ? -1 : 1).map((res)=>res.result);\n    return results;\n};\n\nconst toUnix = (p)=>p.replace(/\\\\/g, \"/\").replace(/(?<!^)\\/+/g, \"/\");\n\nconst compare = (a, b)=>{\n    if (a < b) return -1;\n    if (a > b) return 1;\n    return 0;\n};\n\nconst SUPPORTED_ESBUILD_TARGETS = [\n    \"chrome\",\n    \"deno\",\n    \"edge\",\n    \"firefox\",\n    \"hermes\",\n    \"ie\",\n    \"ios\",\n    \"node\",\n    \"opera\",\n    \"rhino\",\n    \"safari\"\n];\nconst UNSUPPORTED_BROWSERLIST_TARGETS = [\n    \"android 4\",\n    \"android 3\",\n    \"android 2\"\n];\n\nconst compareSemver = (a, b)=>{\n    return compare(Number.parseInt(a[0], 10), Number.parseInt(b[0], 10)) || compare(Number.parseInt(a[1] || \"0\", 10), Number.parseInt(b[1] || \"0\", 10)) || compare(Number.parseInt(a[2] || \"0\", 10), Number.parseInt(b[2] || \"0\", 10));\n};\n\nconst browserslistToEsbuild = (browserslist, cwd, defaultBrowserslist)=>{\n    const browserslistConfig = browserslist.loadConfig({\n        path: cwd\n    }) ?? defaultBrowserslist;\n    return browserslist(browserslistConfig).filter((query)=>!UNSUPPORTED_BROWSERLIST_TARGETS.some((target)=>query.startsWith(target))).map((query)=>{\n        const modified = query === \"safari TP\" ? browserslist(\"last 1 safari version\")[0] : query;\n        const split = modified.split(\" \");\n        if (split[0] === \"android\" || split[0] === \"and_chr\") {\n            split[0] = \"chrome\";\n        }\n        if (split[0] === \"and_ff\") {\n            split[0] = \"firefox\";\n        }\n        if (split[0] === \"ios_saf\" || split[0] === \"ios\") {\n            split[0] = \"safari\";\n        }\n        if (split[1].includes(\"-\")) {\n            split[1] = split[1].slice(0, split[1].indexOf(\"-\"));\n        }\n        if (split[1].endsWith(\".0\")) {\n            split[1] = split[1].slice(0, -2);\n        }\n        return split;\n    }).filter((split)=>SUPPORTED_ESBUILD_TARGETS.includes(split[0]) && /^\\d+(\\.\\d+)*$/.test(split[1])).sort((a, b)=>{\n        if (a[0] === b[0]) {\n            return compareSemver(b[1].split(\".\"), a[1].split(\".\"));\n        } else {\n            return compare(a[0], b[0]);\n        }\n    }).reduce((acc, browser)=>{\n        const existingIndex = acc.findIndex((br)=>br[0] === browser[0]);\n        if (existingIndex !== -1) {\n            acc[existingIndex][1] = browser[1];\n        } else {\n            acc.push(browser);\n        }\n        return acc;\n    }, []).map((split)=>split.join(\"\"));\n};\n\nexport { SUPPORTED_ESBUILD_TARGETS, UNSUPPORTED_BROWSERLIST_TARGETS, browserslistToEsbuild, compare, compareSemver, nonNullable, parallel, toUnix };\n", "import { c as cacheNames$1, S as SerwistError, l as logger, f as finalAssertExports, t as timeout, g as getFriendlyURL, q as quotaErrorCallbacks, a as clientsClaim, b as cleanupOutdatedCaches, w as waitUntil } from './chunks/waitUntil.js';\nimport { B as BackgroundSyncPlugin, N as NetworkFirst, R as Route, a as NetworkOnly, S as Strategy, m as messages, c as cacheOkAndOpaquePlugin, g as generateURLVariations, P as PrecacheStrategy, e as enableNavigationPreload, s as setCacheNameDetails, b as NavigationRoute, d as disableDevLogs, f as createCacheKey, h as defaultMethod, n as normalizeHandler, p as parseRoute, i as PrecacheInstallReportPlugin, j as printInstallDetails, k as printCleanupDetails } from './chunks/printInstallDetails.js';\nexport { l as BackgroundSyncQueue, o as BackgroundSyncQueueStore, q as RegExpRoute, r as StorableRequest, t as StrategyHandler, u as copyResponse, v as disableNavigationPreload, w as isNavigationPreloadSupported } from './chunks/printInstallDetails.js';\nimport { r as resultingClientExists } from './chunks/resultingClientExists.js';\nimport { deleteDB, openDB } from 'idb';\nimport { parallel } from '@serwist/utils';\n\nconst cacheNames = {\n    get googleAnalytics () {\n        return cacheNames$1.getGoogleAnalyticsName();\n    },\n    get precache () {\n        return cacheNames$1.getPrecacheName();\n    },\n    get prefix () {\n        return cacheNames$1.getPrefix();\n    },\n    get runtime () {\n        return cacheNames$1.getRuntimeName();\n    },\n    get suffix () {\n        return cacheNames$1.getSuffix();\n    }\n};\n\nconst BROADCAST_UPDATE_MESSAGE_TYPE = \"CACHE_UPDATED\";\nconst BROADCAST_UPDATE_MESSAGE_META = \"serwist-broadcast-update\";\nconst BROADCAST_UPDATE_DEFAULT_NOTIFY = true;\nconst BROADCAST_UPDATE_DEFAULT_HEADERS = [\n    \"content-length\",\n    \"etag\",\n    \"last-modified\"\n];\n\nconst responsesAreSame = (firstResponse, secondResponse, headersToCheck)=>{\n    if (process.env.NODE_ENV !== \"production\") {\n        if (!(firstResponse instanceof Response && secondResponse instanceof Response)) {\n            throw new SerwistError(\"invalid-responses-are-same-args\");\n        }\n    }\n    const atLeastOneHeaderAvailable = headersToCheck.some((header)=>{\n        return firstResponse.headers.has(header) && secondResponse.headers.has(header);\n    });\n    if (!atLeastOneHeaderAvailable) {\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.warn(\"Unable to determine where the response has been updated because none of the headers that would be checked are present.\");\n            logger.debug(\"Attempting to compare the following: \", firstResponse, secondResponse, headersToCheck);\n        }\n        return true;\n    }\n    return headersToCheck.every((header)=>{\n        const headerStateComparison = firstResponse.headers.has(header) === secondResponse.headers.has(header);\n        const headerValueComparison = firstResponse.headers.get(header) === secondResponse.headers.get(header);\n        return headerStateComparison && headerValueComparison;\n    });\n};\n\nconst isSafari = typeof navigator !== \"undefined\" && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\nconst defaultPayloadGenerator = (data)=>{\n    return {\n        cacheName: data.cacheName,\n        updatedURL: data.request.url\n    };\n};\nclass BroadcastCacheUpdate {\n    _headersToCheck;\n    _generatePayload;\n    _notifyAllClients;\n    constructor({ generatePayload, headersToCheck, notifyAllClients } = {}){\n        this._headersToCheck = headersToCheck || BROADCAST_UPDATE_DEFAULT_HEADERS;\n        this._generatePayload = generatePayload || defaultPayloadGenerator;\n        this._notifyAllClients = notifyAllClients ?? BROADCAST_UPDATE_DEFAULT_NOTIFY;\n    }\n    async notifyIfUpdated(options) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(options.cacheName, \"string\", {\n                moduleName: \"serwist\",\n                className: \"BroadcastCacheUpdate\",\n                funcName: \"notifyIfUpdated\",\n                paramName: \"cacheName\"\n            });\n            finalAssertExports.isInstance(options.newResponse, Response, {\n                moduleName: \"serwist\",\n                className: \"BroadcastCacheUpdate\",\n                funcName: \"notifyIfUpdated\",\n                paramName: \"newResponse\"\n            });\n            finalAssertExports.isInstance(options.request, Request, {\n                moduleName: \"serwist\",\n                className: \"BroadcastCacheUpdate\",\n                funcName: \"notifyIfUpdated\",\n                paramName: \"request\"\n            });\n        }\n        if (!options.oldResponse) {\n            return;\n        }\n        if (!responsesAreSame(options.oldResponse, options.newResponse, this._headersToCheck)) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.log(\"Newer response found (and cached) for:\", options.request.url);\n            }\n            const messageData = {\n                type: BROADCAST_UPDATE_MESSAGE_TYPE,\n                meta: BROADCAST_UPDATE_MESSAGE_META,\n                payload: this._generatePayload(options)\n            };\n            if (options.request.mode === \"navigate\") {\n                let resultingClientId;\n                if (options.event instanceof FetchEvent) {\n                    resultingClientId = options.event.resultingClientId;\n                }\n                const resultingWin = await resultingClientExists(resultingClientId);\n                if (!resultingWin || isSafari) {\n                    await timeout(3500);\n                }\n            }\n            if (this._notifyAllClients) {\n                const windows = await self.clients.matchAll({\n                    type: \"window\"\n                });\n                for (const win of windows){\n                    win.postMessage(messageData);\n                }\n            } else {\n                if (options.event instanceof FetchEvent) {\n                    const client = await self.clients.get(options.event.clientId);\n                    client?.postMessage(messageData);\n                }\n            }\n        }\n    }\n}\n\nclass BroadcastUpdatePlugin {\n    _broadcastUpdate;\n    constructor(options){\n        this._broadcastUpdate = new BroadcastCacheUpdate(options);\n    }\n    cacheDidUpdate(options) {\n        void this._broadcastUpdate.notifyIfUpdated(options);\n    }\n}\n\nclass CacheableResponse {\n    _statuses;\n    _headers;\n    constructor(config = {}){\n        if (process.env.NODE_ENV !== \"production\") {\n            if (!(config.statuses || config.headers)) {\n                throw new SerwistError(\"statuses-or-headers-required\", {\n                    moduleName: \"serwist\",\n                    className: \"CacheableResponse\",\n                    funcName: \"constructor\"\n                });\n            }\n            if (config.statuses) {\n                finalAssertExports.isArray(config.statuses, {\n                    moduleName: \"serwist\",\n                    className: \"CacheableResponse\",\n                    funcName: \"constructor\",\n                    paramName: \"config.statuses\"\n                });\n            }\n            if (config.headers) {\n                finalAssertExports.isType(config.headers, \"object\", {\n                    moduleName: \"serwist\",\n                    className: \"CacheableResponse\",\n                    funcName: \"constructor\",\n                    paramName: \"config.headers\"\n                });\n            }\n        }\n        this._statuses = config.statuses;\n        if (config.headers) {\n            this._headers = new Headers(config.headers);\n        }\n    }\n    isResponseCacheable(response) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(response, Response, {\n                moduleName: \"serwist\",\n                className: \"CacheableResponse\",\n                funcName: \"isResponseCacheable\",\n                paramName: \"response\"\n            });\n        }\n        let cacheable = true;\n        if (this._statuses) {\n            cacheable = this._statuses.includes(response.status);\n        }\n        if (this._headers && cacheable) {\n            for (const [headerName, headerValue] of this._headers.entries()){\n                if (response.headers.get(headerName) !== headerValue) {\n                    cacheable = false;\n                    break;\n                }\n            }\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            if (!cacheable) {\n                logger.groupCollapsed(`The request for '${getFriendlyURL(response.url)}' returned a response that does not meet the criteria for being cached.`);\n                logger.groupCollapsed(\"View cacheability criteria here.\");\n                logger.log(`Cacheable statuses: ${JSON.stringify(this._statuses)}`);\n                logger.log(`Cacheable headers: ${JSON.stringify(this._headers, null, 2)}`);\n                logger.groupEnd();\n                const logFriendlyHeaders = {};\n                response.headers.forEach((value, key)=>{\n                    logFriendlyHeaders[key] = value;\n                });\n                logger.groupCollapsed(\"View response status and headers here.\");\n                logger.log(`Response status: ${response.status}`);\n                logger.log(`Response headers: ${JSON.stringify(logFriendlyHeaders, null, 2)}`);\n                logger.groupEnd();\n                logger.groupCollapsed(\"View full response details here.\");\n                logger.log(response.headers);\n                logger.log(response);\n                logger.groupEnd();\n                logger.groupEnd();\n            }\n        }\n        return cacheable;\n    }\n}\n\nclass CacheableResponsePlugin {\n    _cacheableResponse;\n    constructor(config){\n        this._cacheableResponse = new CacheableResponse(config);\n    }\n    cacheWillUpdate = async ({ response })=>{\n        if (this._cacheableResponse.isResponseCacheable(response)) {\n            return response;\n        }\n        return null;\n    };\n}\n\nconst DB_NAME = \"serwist-expiration\";\nconst CACHE_OBJECT_STORE = \"cache-entries\";\nconst normalizeURL = (unNormalizedUrl)=>{\n    const url = new URL(unNormalizedUrl, location.href);\n    url.hash = \"\";\n    return url.href;\n};\nclass CacheTimestampsModel {\n    _cacheName;\n    _db = null;\n    constructor(cacheName){\n        this._cacheName = cacheName;\n    }\n    _getId(url) {\n        return `${this._cacheName}|${normalizeURL(url)}`;\n    }\n    _upgradeDb(db) {\n        const objStore = db.createObjectStore(CACHE_OBJECT_STORE, {\n            keyPath: \"id\"\n        });\n        objStore.createIndex(\"cacheName\", \"cacheName\", {\n            unique: false\n        });\n        objStore.createIndex(\"timestamp\", \"timestamp\", {\n            unique: false\n        });\n    }\n    _upgradeDbAndDeleteOldDbs(db) {\n        this._upgradeDb(db);\n        if (this._cacheName) {\n            void deleteDB(this._cacheName);\n        }\n    }\n    async setTimestamp(url, timestamp) {\n        url = normalizeURL(url);\n        const entry = {\n            id: this._getId(url),\n            cacheName: this._cacheName,\n            url,\n            timestamp\n        };\n        const db = await this.getDb();\n        const tx = db.transaction(CACHE_OBJECT_STORE, \"readwrite\", {\n            durability: \"relaxed\"\n        });\n        await tx.store.put(entry);\n        await tx.done;\n    }\n    async getTimestamp(url) {\n        const db = await this.getDb();\n        const entry = await db.get(CACHE_OBJECT_STORE, this._getId(url));\n        return entry?.timestamp;\n    }\n    async expireEntries(minTimestamp, maxCount) {\n        const db = await this.getDb();\n        let cursor = await db.transaction(CACHE_OBJECT_STORE, \"readwrite\").store.index(\"timestamp\").openCursor(null, \"prev\");\n        const urlsDeleted = [];\n        let entriesNotDeletedCount = 0;\n        while(cursor){\n            const result = cursor.value;\n            if (result.cacheName === this._cacheName) {\n                if (minTimestamp && result.timestamp < minTimestamp || maxCount && entriesNotDeletedCount >= maxCount) {\n                    cursor.delete();\n                    urlsDeleted.push(result.url);\n                } else {\n                    entriesNotDeletedCount++;\n                }\n            }\n            cursor = await cursor.continue();\n        }\n        return urlsDeleted;\n    }\n    async getDb() {\n        if (!this._db) {\n            this._db = await openDB(DB_NAME, 1, {\n                upgrade: this._upgradeDbAndDeleteOldDbs.bind(this)\n            });\n        }\n        return this._db;\n    }\n}\n\nclass CacheExpiration {\n    _isRunning = false;\n    _rerunRequested = false;\n    _maxEntries;\n    _maxAgeSeconds;\n    _matchOptions;\n    _cacheName;\n    _timestampModel;\n    constructor(cacheName, config = {}){\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(cacheName, \"string\", {\n                moduleName: \"serwist\",\n                className: \"CacheExpiration\",\n                funcName: \"constructor\",\n                paramName: \"cacheName\"\n            });\n            if (!(config.maxEntries || config.maxAgeSeconds)) {\n                throw new SerwistError(\"max-entries-or-age-required\", {\n                    moduleName: \"serwist\",\n                    className: \"CacheExpiration\",\n                    funcName: \"constructor\"\n                });\n            }\n            if (config.maxEntries) {\n                finalAssertExports.isType(config.maxEntries, \"number\", {\n                    moduleName: \"serwist\",\n                    className: \"CacheExpiration\",\n                    funcName: \"constructor\",\n                    paramName: \"config.maxEntries\"\n                });\n            }\n            if (config.maxAgeSeconds) {\n                finalAssertExports.isType(config.maxAgeSeconds, \"number\", {\n                    moduleName: \"serwist\",\n                    className: \"CacheExpiration\",\n                    funcName: \"constructor\",\n                    paramName: \"config.maxAgeSeconds\"\n                });\n            }\n        }\n        this._maxEntries = config.maxEntries;\n        this._maxAgeSeconds = config.maxAgeSeconds;\n        this._matchOptions = config.matchOptions;\n        this._cacheName = cacheName;\n        this._timestampModel = new CacheTimestampsModel(cacheName);\n    }\n    async expireEntries() {\n        if (this._isRunning) {\n            this._rerunRequested = true;\n            return;\n        }\n        this._isRunning = true;\n        const minTimestamp = this._maxAgeSeconds ? Date.now() - this._maxAgeSeconds * 1000 : 0;\n        const urlsExpired = await this._timestampModel.expireEntries(minTimestamp, this._maxEntries);\n        const cache = await self.caches.open(this._cacheName);\n        for (const url of urlsExpired){\n            await cache.delete(url, this._matchOptions);\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            if (urlsExpired.length > 0) {\n                logger.groupCollapsed(`Expired ${urlsExpired.length} ` + `${urlsExpired.length === 1 ? \"entry\" : \"entries\"} and removed ` + `${urlsExpired.length === 1 ? \"it\" : \"them\"} from the ` + `'${this._cacheName}' cache.`);\n                logger.log(`Expired the following ${urlsExpired.length === 1 ? \"URL\" : \"URLs\"}:`);\n                for (const url of urlsExpired){\n                    logger.log(`    ${url}`);\n                }\n                logger.groupEnd();\n            } else {\n                logger.debug(\"Cache expiration ran and found no entries to remove.\");\n            }\n        }\n        this._isRunning = false;\n        if (this._rerunRequested) {\n            this._rerunRequested = false;\n            void this.expireEntries();\n        }\n    }\n    async updateTimestamp(url) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(url, \"string\", {\n                moduleName: \"serwist\",\n                className: \"CacheExpiration\",\n                funcName: \"updateTimestamp\",\n                paramName: \"url\"\n            });\n        }\n        await this._timestampModel.setTimestamp(url, Date.now());\n    }\n    async isURLExpired(url) {\n        if (!this._maxAgeSeconds) {\n            if (process.env.NODE_ENV !== \"production\") {\n                throw new SerwistError(\"expired-test-without-max-age\", {\n                    methodName: \"isURLExpired\",\n                    paramName: \"maxAgeSeconds\"\n                });\n            }\n            return false;\n        }\n        const timestamp = await this._timestampModel.getTimestamp(url);\n        const expireOlderThan = Date.now() - this._maxAgeSeconds * 1000;\n        return timestamp !== undefined ? timestamp < expireOlderThan : true;\n    }\n    async delete() {\n        this._rerunRequested = false;\n        await this._timestampModel.expireEntries(Number.POSITIVE_INFINITY);\n    }\n}\n\nconst registerQuotaErrorCallback = (callback)=>{\n    if (process.env.NODE_ENV !== \"production\") {\n        finalAssertExports.isType(callback, \"function\", {\n            moduleName: \"@serwist/core\",\n            funcName: \"register\",\n            paramName: \"callback\"\n        });\n    }\n    quotaErrorCallbacks.add(callback);\n    if (process.env.NODE_ENV !== \"production\") {\n        logger.log(\"Registered a callback to respond to quota errors.\", callback);\n    }\n};\n\nclass ExpirationPlugin {\n    _config;\n    _cacheExpirations;\n    constructor(config = {}){\n        if (process.env.NODE_ENV !== \"production\") {\n            if (!(config.maxEntries || config.maxAgeSeconds)) {\n                throw new SerwistError(\"max-entries-or-age-required\", {\n                    moduleName: \"serwist\",\n                    className: \"ExpirationPlugin\",\n                    funcName: \"constructor\"\n                });\n            }\n            if (config.maxEntries) {\n                finalAssertExports.isType(config.maxEntries, \"number\", {\n                    moduleName: \"serwist\",\n                    className: \"ExpirationPlugin\",\n                    funcName: \"constructor\",\n                    paramName: \"config.maxEntries\"\n                });\n            }\n            if (config.maxAgeSeconds) {\n                finalAssertExports.isType(config.maxAgeSeconds, \"number\", {\n                    moduleName: \"serwist\",\n                    className: \"ExpirationPlugin\",\n                    funcName: \"constructor\",\n                    paramName: \"config.maxAgeSeconds\"\n                });\n            }\n            if (config.maxAgeFrom) {\n                finalAssertExports.isType(config.maxAgeFrom, \"string\", {\n                    moduleName: \"serwist\",\n                    className: \"ExpirationPlugin\",\n                    funcName: \"constructor\",\n                    paramName: \"config.maxAgeFrom\"\n                });\n            }\n        }\n        this._config = config;\n        this._cacheExpirations = new Map();\n        if (!this._config.maxAgeFrom) {\n            this._config.maxAgeFrom = \"last-fetched\";\n        }\n        if (this._config.purgeOnQuotaError) {\n            registerQuotaErrorCallback(()=>this.deleteCacheAndMetadata());\n        }\n    }\n    _getCacheExpiration(cacheName) {\n        if (cacheName === cacheNames$1.getRuntimeName()) {\n            throw new SerwistError(\"expire-custom-caches-only\");\n        }\n        let cacheExpiration = this._cacheExpirations.get(cacheName);\n        if (!cacheExpiration) {\n            cacheExpiration = new CacheExpiration(cacheName, this._config);\n            this._cacheExpirations.set(cacheName, cacheExpiration);\n        }\n        return cacheExpiration;\n    }\n    cachedResponseWillBeUsed({ event, cacheName, request, cachedResponse }) {\n        if (!cachedResponse) {\n            return null;\n        }\n        const isFresh = this._isResponseDateFresh(cachedResponse);\n        const cacheExpiration = this._getCacheExpiration(cacheName);\n        const isMaxAgeFromLastUsed = this._config.maxAgeFrom === \"last-used\";\n        const done = (async ()=>{\n            if (isMaxAgeFromLastUsed) {\n                await cacheExpiration.updateTimestamp(request.url);\n            }\n            await cacheExpiration.expireEntries();\n        })();\n        try {\n            event.waitUntil(done);\n        } catch  {\n            if (process.env.NODE_ENV !== \"production\") {\n                if (event instanceof FetchEvent) {\n                    logger.warn(`Unable to ensure service worker stays alive when updating cache entry for '${getFriendlyURL(event.request.url)}'.`);\n                }\n            }\n        }\n        return isFresh ? cachedResponse : null;\n    }\n    _isResponseDateFresh(cachedResponse) {\n        const isMaxAgeFromLastUsed = this._config.maxAgeFrom === \"last-used\";\n        if (isMaxAgeFromLastUsed) {\n            return true;\n        }\n        const now = Date.now();\n        if (!this._config.maxAgeSeconds) {\n            return true;\n        }\n        const dateHeaderTimestamp = this._getDateHeaderTimestamp(cachedResponse);\n        if (dateHeaderTimestamp === null) {\n            return true;\n        }\n        return dateHeaderTimestamp >= now - this._config.maxAgeSeconds * 1000;\n    }\n    _getDateHeaderTimestamp(cachedResponse) {\n        if (!cachedResponse.headers.has(\"date\")) {\n            return null;\n        }\n        const dateHeader = cachedResponse.headers.get(\"date\");\n        const parsedDate = new Date(dateHeader);\n        const headerTime = parsedDate.getTime();\n        if (Number.isNaN(headerTime)) {\n            return null;\n        }\n        return headerTime;\n    }\n    async cacheDidUpdate({ cacheName, request }) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(cacheName, \"string\", {\n                moduleName: \"serwist\",\n                className: \"Plugin\",\n                funcName: \"cacheDidUpdate\",\n                paramName: \"cacheName\"\n            });\n            finalAssertExports.isInstance(request, Request, {\n                moduleName: \"serwist\",\n                className: \"Plugin\",\n                funcName: \"cacheDidUpdate\",\n                paramName: \"request\"\n            });\n        }\n        const cacheExpiration = this._getCacheExpiration(cacheName);\n        await cacheExpiration.updateTimestamp(request.url);\n        await cacheExpiration.expireEntries();\n    }\n    async deleteCacheAndMetadata() {\n        for (const [cacheName, cacheExpiration] of this._cacheExpirations){\n            await self.caches.delete(cacheName);\n            await cacheExpiration.delete();\n        }\n        this._cacheExpirations = new Map();\n    }\n}\n\nconst QUEUE_NAME = \"serwist-google-analytics\";\nconst MAX_RETENTION_TIME = 60 * 48;\nconst GOOGLE_ANALYTICS_HOST = \"www.google-analytics.com\";\nconst GTM_HOST = \"www.googletagmanager.com\";\nconst ANALYTICS_JS_PATH = \"/analytics.js\";\nconst GTAG_JS_PATH = \"/gtag/js\";\nconst GTM_JS_PATH = \"/gtm.js\";\nconst COLLECT_PATHS_REGEX = /^\\/(\\w+\\/)?collect/;\n\nconst createOnSyncCallback = (config)=>{\n    return async ({ queue })=>{\n        let entry;\n        while(entry = await queue.shiftRequest()){\n            const { request, timestamp } = entry;\n            const url = new URL(request.url);\n            try {\n                const params = request.method === \"POST\" ? new URLSearchParams(await request.clone().text()) : url.searchParams;\n                const originalHitTime = timestamp - (Number(params.get(\"qt\")) || 0);\n                const queueTime = Date.now() - originalHitTime;\n                params.set(\"qt\", String(queueTime));\n                if (config.parameterOverrides) {\n                    for (const param of Object.keys(config.parameterOverrides)){\n                        const value = config.parameterOverrides[param];\n                        params.set(param, value);\n                    }\n                }\n                if (typeof config.hitFilter === \"function\") {\n                    config.hitFilter.call(null, params);\n                }\n                await fetch(new Request(url.origin + url.pathname, {\n                    body: params.toString(),\n                    method: \"POST\",\n                    mode: \"cors\",\n                    credentials: \"omit\",\n                    headers: {\n                        \"Content-Type\": \"text/plain\"\n                    }\n                }));\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.log(`Request for '${getFriendlyURL(url.href)}' has been replayed`);\n                }\n            } catch (err) {\n                await queue.unshiftRequest(entry);\n                if (process.env.NODE_ENV !== \"production\") {\n                    logger.log(`Request for '${getFriendlyURL(url.href)}' failed to replay, putting it back in the queue.`);\n                }\n                throw err;\n            }\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.log(\"All Google Analytics request successfully replayed; \" + \"the queue is now empty!\");\n        }\n    };\n};\nconst createCollectRoutes = (bgSyncPlugin)=>{\n    const match = ({ url })=>url.hostname === GOOGLE_ANALYTICS_HOST && COLLECT_PATHS_REGEX.test(url.pathname);\n    const handler = new NetworkOnly({\n        plugins: [\n            bgSyncPlugin\n        ]\n    });\n    return [\n        new Route(match, handler, \"GET\"),\n        new Route(match, handler, \"POST\")\n    ];\n};\nconst createAnalyticsJsRoute = (cacheName)=>{\n    const match = ({ url })=>url.hostname === GOOGLE_ANALYTICS_HOST && url.pathname === ANALYTICS_JS_PATH;\n    const handler = new NetworkFirst({\n        cacheName\n    });\n    return new Route(match, handler, \"GET\");\n};\nconst createGtagJsRoute = (cacheName)=>{\n    const match = ({ url })=>url.hostname === GTM_HOST && url.pathname === GTAG_JS_PATH;\n    const handler = new NetworkFirst({\n        cacheName\n    });\n    return new Route(match, handler, \"GET\");\n};\nconst createGtmJsRoute = (cacheName)=>{\n    const match = ({ url })=>url.hostname === GTM_HOST && url.pathname === GTM_JS_PATH;\n    const handler = new NetworkFirst({\n        cacheName\n    });\n    return new Route(match, handler, \"GET\");\n};\nconst initializeGoogleAnalytics = ({ serwist, cacheName, ...options })=>{\n    const resolvedCacheName = cacheNames$1.getGoogleAnalyticsName(cacheName);\n    const bgSyncPlugin = new BackgroundSyncPlugin(QUEUE_NAME, {\n        maxRetentionTime: MAX_RETENTION_TIME,\n        onSync: createOnSyncCallback(options)\n    });\n    const routes = [\n        createGtmJsRoute(resolvedCacheName),\n        createAnalyticsJsRoute(resolvedCacheName),\n        createGtagJsRoute(resolvedCacheName),\n        ...createCollectRoutes(bgSyncPlugin)\n    ];\n    for (const route of routes){\n        serwist.registerRoute(route);\n    }\n};\n\nclass PrecacheFallbackPlugin {\n    _fallbackUrls;\n    _serwist;\n    constructor({ fallbackUrls, serwist }){\n        this._fallbackUrls = fallbackUrls;\n        this._serwist = serwist;\n    }\n    async handlerDidError(param) {\n        for (const fallback of this._fallbackUrls){\n            if (typeof fallback === \"string\") {\n                const fallbackResponse = await this._serwist.matchPrecache(fallback);\n                if (fallbackResponse !== undefined) {\n                    return fallbackResponse;\n                }\n            } else if (fallback.matcher(param)) {\n                const fallbackResponse = await this._serwist.matchPrecache(fallback.url);\n                if (fallbackResponse !== undefined) {\n                    return fallbackResponse;\n                }\n            }\n        }\n        return undefined;\n    }\n}\n\nconst calculateEffectiveBoundaries = (blob, start, end)=>{\n    if (process.env.NODE_ENV !== \"production\") {\n        finalAssertExports.isInstance(blob, Blob, {\n            moduleName: \"@serwist/range-requests\",\n            funcName: \"calculateEffectiveBoundaries\",\n            paramName: \"blob\"\n        });\n    }\n    const blobSize = blob.size;\n    if (end && end > blobSize || start && start < 0) {\n        throw new SerwistError(\"range-not-satisfiable\", {\n            size: blobSize,\n            end,\n            start\n        });\n    }\n    let effectiveStart;\n    let effectiveEnd;\n    if (start !== undefined && end !== undefined) {\n        effectiveStart = start;\n        effectiveEnd = end + 1;\n    } else if (start !== undefined && end === undefined) {\n        effectiveStart = start;\n        effectiveEnd = blobSize;\n    } else if (end !== undefined && start === undefined) {\n        effectiveStart = blobSize - end;\n        effectiveEnd = blobSize;\n    }\n    return {\n        start: effectiveStart,\n        end: effectiveEnd\n    };\n};\n\nconst parseRangeHeader = (rangeHeader)=>{\n    if (process.env.NODE_ENV !== \"production\") {\n        finalAssertExports.isType(rangeHeader, \"string\", {\n            moduleName: \"@serwist/range-requests\",\n            funcName: \"parseRangeHeader\",\n            paramName: \"rangeHeader\"\n        });\n    }\n    const normalizedRangeHeader = rangeHeader.trim().toLowerCase();\n    if (!normalizedRangeHeader.startsWith(\"bytes=\")) {\n        throw new SerwistError(\"unit-must-be-bytes\", {\n            normalizedRangeHeader\n        });\n    }\n    if (normalizedRangeHeader.includes(\",\")) {\n        throw new SerwistError(\"single-range-only\", {\n            normalizedRangeHeader\n        });\n    }\n    const rangeParts = /(\\d*)-(\\d*)/.exec(normalizedRangeHeader);\n    if (!rangeParts || !(rangeParts[1] || rangeParts[2])) {\n        throw new SerwistError(\"invalid-range-values\", {\n            normalizedRangeHeader\n        });\n    }\n    return {\n        start: rangeParts[1] === \"\" ? undefined : Number(rangeParts[1]),\n        end: rangeParts[2] === \"\" ? undefined : Number(rangeParts[2])\n    };\n};\n\nconst createPartialResponse = async (request, originalResponse)=>{\n    try {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(request, Request, {\n                moduleName: \"@serwist/range-requests\",\n                funcName: \"createPartialResponse\",\n                paramName: \"request\"\n            });\n            finalAssertExports.isInstance(originalResponse, Response, {\n                moduleName: \"@serwist/range-requests\",\n                funcName: \"createPartialResponse\",\n                paramName: \"originalResponse\"\n            });\n        }\n        if (originalResponse.status === 206) {\n            return originalResponse;\n        }\n        const rangeHeader = request.headers.get(\"range\");\n        if (!rangeHeader) {\n            throw new SerwistError(\"no-range-header\");\n        }\n        const boundaries = parseRangeHeader(rangeHeader);\n        const originalBlob = await originalResponse.blob();\n        const effectiveBoundaries = calculateEffectiveBoundaries(originalBlob, boundaries.start, boundaries.end);\n        const slicedBlob = originalBlob.slice(effectiveBoundaries.start, effectiveBoundaries.end);\n        const slicedBlobSize = slicedBlob.size;\n        const slicedResponse = new Response(slicedBlob, {\n            status: 206,\n            statusText: \"Partial Content\",\n            headers: originalResponse.headers\n        });\n        slicedResponse.headers.set(\"Content-Length\", String(slicedBlobSize));\n        slicedResponse.headers.set(\"Content-Range\", `bytes ${effectiveBoundaries.start}-${effectiveBoundaries.end - 1}/` + `${originalBlob.size}`);\n        return slicedResponse;\n    } catch (error) {\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.warn(\"Unable to construct a partial response; returning a \" + \"416 Range Not Satisfiable response instead.\");\n            logger.groupCollapsed(\"View details here.\");\n            logger.log(error);\n            logger.log(request);\n            logger.log(originalResponse);\n            logger.groupEnd();\n        }\n        return new Response(\"\", {\n            status: 416,\n            statusText: \"Range Not Satisfiable\"\n        });\n    }\n};\n\nclass RangeRequestsPlugin {\n    cachedResponseWillBeUsed = async ({ request, cachedResponse })=>{\n        if (cachedResponse && request.headers.has(\"range\")) {\n            return await createPartialResponse(request, cachedResponse);\n        }\n        return cachedResponse;\n    };\n}\n\nclass CacheFirst extends Strategy {\n    async _handle(request, handler) {\n        const logs = [];\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(request, Request, {\n                moduleName: \"serwist\",\n                className: this.constructor.name,\n                funcName: \"makeRequest\",\n                paramName: \"request\"\n            });\n        }\n        let response = await handler.cacheMatch(request);\n        let error;\n        if (!response) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logs.push(`No response found in the '${this.cacheName}' cache. Will respond with a network request.`);\n            }\n            try {\n                response = await handler.fetchAndCachePut(request);\n            } catch (err) {\n                if (err instanceof Error) {\n                    error = err;\n                }\n            }\n            if (process.env.NODE_ENV !== \"production\") {\n                if (response) {\n                    logs.push(\"Got response from network.\");\n                } else {\n                    logs.push(\"Unable to get a response from the network.\");\n                }\n            }\n        } else {\n            if (process.env.NODE_ENV !== \"production\") {\n                logs.push(`Found a cached response in the '${this.cacheName}' cache.`);\n            }\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n            for (const log of logs){\n                logger.log(log);\n            }\n            messages.printFinalResponse(response);\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new SerwistError(\"no-response\", {\n                url: request.url,\n                error\n            });\n        }\n        return response;\n    }\n}\n\nclass CacheOnly extends Strategy {\n    async _handle(request, handler) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(request, Request, {\n                moduleName: \"serwist\",\n                className: this.constructor.name,\n                funcName: \"makeRequest\",\n                paramName: \"request\"\n            });\n        }\n        const response = await handler.cacheMatch(request);\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n            if (response) {\n                logger.log(`Found a cached response in the '${this.cacheName}' cache.`);\n                messages.printFinalResponse(response);\n            } else {\n                logger.log(`No response found in the '${this.cacheName}' cache.`);\n            }\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new SerwistError(\"no-response\", {\n                url: request.url\n            });\n        }\n        return response;\n    }\n}\n\nclass StaleWhileRevalidate extends Strategy {\n    constructor(options = {}){\n        super(options);\n        if (!this.plugins.some((p)=>\"cacheWillUpdate\" in p)) {\n            this.plugins.unshift(cacheOkAndOpaquePlugin);\n        }\n    }\n    async _handle(request, handler) {\n        const logs = [];\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(request, Request, {\n                moduleName: \"serwist\",\n                className: this.constructor.name,\n                funcName: \"handle\",\n                paramName: \"request\"\n            });\n        }\n        const fetchAndCachePromise = handler.fetchAndCachePut(request).catch(()=>{});\n        void handler.waitUntil(fetchAndCachePromise);\n        let response = await handler.cacheMatch(request);\n        let error;\n        if (response) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logs.push(`Found a cached response in the '${this.cacheName}' cache. Will update with the network response in the background.`);\n            }\n        } else {\n            if (process.env.NODE_ENV !== \"production\") {\n                logs.push(`No response found in the '${this.cacheName}' cache. Will wait for the network response.`);\n            }\n            try {\n                response = await fetchAndCachePromise;\n            } catch (err) {\n                if (err instanceof Error) {\n                    error = err;\n                }\n            }\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.groupCollapsed(messages.strategyStart(this.constructor.name, request));\n            for (const log of logs){\n                logger.log(log);\n            }\n            messages.printFinalResponse(response);\n            logger.groupEnd();\n        }\n        if (!response) {\n            throw new SerwistError(\"no-response\", {\n                url: request.url,\n                error\n            });\n        }\n        return response;\n    }\n}\n\nclass PrecacheRoute extends Route {\n    constructor(serwist, options){\n        const match = ({ request })=>{\n            const urlsToCacheKeys = serwist.getUrlsToPrecacheKeys();\n            for (const possibleURL of generateURLVariations(request.url, options)){\n                const cacheKey = urlsToCacheKeys.get(possibleURL);\n                if (cacheKey) {\n                    const integrity = serwist.getIntegrityForPrecacheKey(cacheKey);\n                    return {\n                        cacheKey,\n                        integrity\n                    };\n                }\n            }\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.debug(`Precaching did not find a match for ${getFriendlyURL(request.url)}.`);\n            }\n            return;\n        };\n        super(match, serwist.precacheStrategy);\n    }\n}\n\nclass PrecacheCacheKeyPlugin {\n    _precacheController;\n    constructor({ precacheController }){\n        this._precacheController = precacheController;\n    }\n    cacheKeyWillBeUsed = async ({ request, params })=>{\n        const cacheKey = params?.cacheKey || this._precacheController.getPrecacheKeyForUrl(request.url);\n        return cacheKey ? new Request(cacheKey, {\n            headers: request.headers\n        }) : request;\n    };\n}\n\nconst parsePrecacheOptions = (serwist, precacheOptions = {})=>{\n    const { cacheName: precacheCacheName, plugins: precachePlugins = [], fetchOptions: precacheFetchOptions, matchOptions: precacheMatchOptions, fallbackToNetwork: precacheFallbackToNetwork, directoryIndex: precacheDirectoryIndex, ignoreURLParametersMatching: precacheIgnoreUrls, cleanURLs: precacheCleanUrls, urlManipulation: precacheUrlManipulation, cleanupOutdatedCaches, concurrency = 10, navigateFallback, navigateFallbackAllowlist, navigateFallbackDenylist } = precacheOptions ?? {};\n    return {\n        precacheStrategyOptions: {\n            cacheName: cacheNames$1.getPrecacheName(precacheCacheName),\n            plugins: [\n                ...precachePlugins,\n                new PrecacheCacheKeyPlugin({\n                    precacheController: serwist\n                })\n            ],\n            fetchOptions: precacheFetchOptions,\n            matchOptions: precacheMatchOptions,\n            fallbackToNetwork: precacheFallbackToNetwork\n        },\n        precacheRouteOptions: {\n            directoryIndex: precacheDirectoryIndex,\n            ignoreURLParametersMatching: precacheIgnoreUrls,\n            cleanURLs: precacheCleanUrls,\n            urlManipulation: precacheUrlManipulation\n        },\n        precacheMiscOptions: {\n            cleanupOutdatedCaches,\n            concurrency,\n            navigateFallback,\n            navigateFallbackAllowlist,\n            navigateFallbackDenylist\n        }\n    };\n};\n\nclass Serwist {\n    _urlsToCacheKeys = new Map();\n    _urlsToCacheModes = new Map();\n    _cacheKeysToIntegrities = new Map();\n    _concurrentPrecaching;\n    _precacheStrategy;\n    _routes;\n    _defaultHandlerMap;\n    _catchHandler;\n    _requestRules;\n    constructor({ precacheEntries, precacheOptions, skipWaiting = false, importScripts, navigationPreload = false, cacheId, clientsClaim: clientsClaim$1 = false, runtimeCaching, offlineAnalyticsConfig, disableDevLogs: disableDevLogs$1 = false, fallbacks, requestRules } = {}){\n        const { precacheStrategyOptions, precacheRouteOptions, precacheMiscOptions } = parsePrecacheOptions(this, precacheOptions);\n        this._concurrentPrecaching = precacheMiscOptions.concurrency;\n        this._precacheStrategy = new PrecacheStrategy(precacheStrategyOptions);\n        this._routes = new Map();\n        this._defaultHandlerMap = new Map();\n        this._requestRules = requestRules;\n        this.handleInstall = this.handleInstall.bind(this);\n        this.handleActivate = this.handleActivate.bind(this);\n        this.handleFetch = this.handleFetch.bind(this);\n        this.handleCache = this.handleCache.bind(this);\n        if (!!importScripts && importScripts.length > 0) self.importScripts(...importScripts);\n        if (navigationPreload) enableNavigationPreload();\n        if (cacheId !== undefined) {\n            setCacheNameDetails({\n                prefix: cacheId\n            });\n        }\n        if (skipWaiting) {\n            self.skipWaiting();\n        } else {\n            self.addEventListener(\"message\", (event)=>{\n                if (event.data && event.data.type === \"SKIP_WAITING\") {\n                    self.skipWaiting();\n                }\n            });\n        }\n        if (clientsClaim$1) clientsClaim();\n        if (!!precacheEntries && precacheEntries.length > 0) {\n            this.addToPrecacheList(precacheEntries);\n        }\n        if (precacheMiscOptions.cleanupOutdatedCaches) {\n            cleanupOutdatedCaches(precacheStrategyOptions.cacheName);\n        }\n        this.registerRoute(new PrecacheRoute(this, precacheRouteOptions));\n        if (precacheMiscOptions.navigateFallback) {\n            this.registerRoute(new NavigationRoute(this.createHandlerBoundToUrl(precacheMiscOptions.navigateFallback), {\n                allowlist: precacheMiscOptions.navigateFallbackAllowlist,\n                denylist: precacheMiscOptions.navigateFallbackDenylist\n            }));\n        }\n        if (offlineAnalyticsConfig !== undefined) {\n            if (typeof offlineAnalyticsConfig === \"boolean\") {\n                offlineAnalyticsConfig && initializeGoogleAnalytics({\n                    serwist: this\n                });\n            } else {\n                initializeGoogleAnalytics({\n                    ...offlineAnalyticsConfig,\n                    serwist: this\n                });\n            }\n        }\n        if (runtimeCaching !== undefined) {\n            if (fallbacks !== undefined) {\n                const fallbackPlugin = new PrecacheFallbackPlugin({\n                    fallbackUrls: fallbacks.entries,\n                    serwist: this\n                });\n                runtimeCaching.forEach((cacheEntry)=>{\n                    if (cacheEntry.handler instanceof Strategy && !cacheEntry.handler.plugins.some((plugin)=>\"handlerDidError\" in plugin)) {\n                        cacheEntry.handler.plugins.push(fallbackPlugin);\n                    }\n                });\n            }\n            for (const entry of runtimeCaching){\n                this.registerCapture(entry.matcher, entry.handler, entry.method);\n            }\n        }\n        if (disableDevLogs$1) disableDevLogs();\n    }\n    get precacheStrategy() {\n        return this._precacheStrategy;\n    }\n    get routes() {\n        return this._routes;\n    }\n    addEventListeners() {\n        self.addEventListener(\"install\", this.handleInstall);\n        self.addEventListener(\"activate\", this.handleActivate);\n        self.addEventListener(\"fetch\", this.handleFetch);\n        self.addEventListener(\"message\", this.handleCache);\n    }\n    addToPrecacheList(entries) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isArray(entries, {\n                moduleName: \"serwist\",\n                className: \"Serwist\",\n                funcName: \"addToCacheList\",\n                paramName: \"entries\"\n            });\n        }\n        const urlsToWarnAbout = [];\n        for (const entry of entries){\n            if (typeof entry === \"string\") {\n                urlsToWarnAbout.push(entry);\n            } else if (entry && !entry.integrity && entry.revision === undefined) {\n                urlsToWarnAbout.push(entry.url);\n            }\n            const { cacheKey, url } = createCacheKey(entry);\n            const cacheMode = typeof entry !== \"string\" && entry.revision ? \"reload\" : \"default\";\n            if (this._urlsToCacheKeys.has(url) && this._urlsToCacheKeys.get(url) !== cacheKey) {\n                throw new SerwistError(\"add-to-cache-list-conflicting-entries\", {\n                    firstEntry: this._urlsToCacheKeys.get(url),\n                    secondEntry: cacheKey\n                });\n            }\n            if (typeof entry !== \"string\" && entry.integrity) {\n                if (this._cacheKeysToIntegrities.has(cacheKey) && this._cacheKeysToIntegrities.get(cacheKey) !== entry.integrity) {\n                    throw new SerwistError(\"add-to-cache-list-conflicting-integrities\", {\n                        url\n                    });\n                }\n                this._cacheKeysToIntegrities.set(cacheKey, entry.integrity);\n            }\n            this._urlsToCacheKeys.set(url, cacheKey);\n            this._urlsToCacheModes.set(url, cacheMode);\n        }\n        if (urlsToWarnAbout.length > 0) {\n            const warningMessage = `Serwist is precaching URLs without revision info: ${urlsToWarnAbout.join(\", \")}\\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;\n            if (process.env.NODE_ENV === \"production\") {\n                console.warn(warningMessage);\n            } else {\n                logger.warn(warningMessage);\n            }\n        }\n    }\n    handleInstall(event) {\n        void this.registerRequestRules(event);\n        return waitUntil(event, async ()=>{\n            const installReportPlugin = new PrecacheInstallReportPlugin();\n            this.precacheStrategy.plugins.push(installReportPlugin);\n            await parallel(this._concurrentPrecaching, Array.from(this._urlsToCacheKeys.entries()), async ([url, cacheKey])=>{\n                const integrity = this._cacheKeysToIntegrities.get(cacheKey);\n                const cacheMode = this._urlsToCacheModes.get(url);\n                const request = new Request(url, {\n                    integrity,\n                    cache: cacheMode,\n                    credentials: \"same-origin\"\n                });\n                await Promise.all(this.precacheStrategy.handleAll({\n                    event,\n                    request,\n                    url: new URL(request.url),\n                    params: {\n                        cacheKey\n                    }\n                }));\n            });\n            const { updatedURLs, notUpdatedURLs } = installReportPlugin;\n            if (process.env.NODE_ENV !== \"production\") {\n                printInstallDetails(updatedURLs, notUpdatedURLs);\n            }\n            return {\n                updatedURLs,\n                notUpdatedURLs\n            };\n        });\n    }\n    async registerRequestRules(event) {\n        if (!this._requestRules) {\n            return;\n        }\n        if (!event?.addRoutes) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.warn(\"Request rules ignored as the Static Routing API is not supported in this browser. \" + \"See https://caniuse.com/mdn-api_installevent_addroutes for more information.\");\n            }\n            return;\n        }\n        try {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.warn(\"Request rules may not be supported in all browsers as the Static Routing API is experimental. \" + \"This feature allows bypassing the service worker for specific requests to improve performance. \" + \"See https://developer.mozilla.org/en-US/docs/Web/API/InstallEvent/addRoutes for more information.\");\n            }\n            await event.addRoutes(this._requestRules);\n            this._requestRules = undefined;\n        } catch (error) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.error(`Failed to register request rules: ${error instanceof Error ? error.message : String(error)}. ` + \"This may occur if the browser doesn't support the Static Routing API or if the request rules are invalid.\");\n            }\n            throw error;\n        }\n    }\n    handleActivate(event) {\n        return waitUntil(event, async ()=>{\n            const cache = await self.caches.open(this.precacheStrategy.cacheName);\n            const currentlyCachedRequests = await cache.keys();\n            const expectedCacheKeys = new Set(this._urlsToCacheKeys.values());\n            const deletedCacheRequests = [];\n            for (const request of currentlyCachedRequests){\n                if (!expectedCacheKeys.has(request.url)) {\n                    await cache.delete(request);\n                    deletedCacheRequests.push(request.url);\n                }\n            }\n            if (process.env.NODE_ENV !== \"production\") {\n                printCleanupDetails(deletedCacheRequests);\n            }\n            return {\n                deletedCacheRequests\n            };\n        });\n    }\n    handleFetch(event) {\n        const { request } = event;\n        const responsePromise = this.handleRequest({\n            request,\n            event\n        });\n        if (responsePromise) {\n            event.respondWith(responsePromise);\n        }\n    }\n    handleCache(event) {\n        if (event.data && event.data.type === \"CACHE_URLS\") {\n            const { payload } = event.data;\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.debug(\"Caching URLs from the window\", payload.urlsToCache);\n            }\n            const requestPromises = Promise.all(payload.urlsToCache.map((entry)=>{\n                let request;\n                if (typeof entry === \"string\") {\n                    request = new Request(entry);\n                } else {\n                    request = new Request(...entry);\n                }\n                return this.handleRequest({\n                    request,\n                    event\n                });\n            }));\n            event.waitUntil(requestPromises);\n            if (event.ports?.[0]) {\n                void requestPromises.then(()=>event.ports[0].postMessage(true));\n            }\n        }\n    }\n    setDefaultHandler(handler, method = defaultMethod) {\n        this._defaultHandlerMap.set(method, normalizeHandler(handler));\n    }\n    setCatchHandler(handler) {\n        this._catchHandler = normalizeHandler(handler);\n    }\n    registerCapture(capture, handler, method) {\n        const route = parseRoute(capture, handler, method);\n        this.registerRoute(route);\n        return route;\n    }\n    registerRoute(route) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isType(route, \"object\", {\n                moduleName: \"serwist\",\n                className: \"Serwist\",\n                funcName: \"registerRoute\",\n                paramName: \"route\"\n            });\n            finalAssertExports.hasMethod(route, \"match\", {\n                moduleName: \"serwist\",\n                className: \"Serwist\",\n                funcName: \"registerRoute\",\n                paramName: \"route\"\n            });\n            finalAssertExports.isType(route.handler, \"object\", {\n                moduleName: \"serwist\",\n                className: \"Serwist\",\n                funcName: \"registerRoute\",\n                paramName: \"route\"\n            });\n            finalAssertExports.hasMethod(route.handler, \"handle\", {\n                moduleName: \"serwist\",\n                className: \"Serwist\",\n                funcName: \"registerRoute\",\n                paramName: \"route.handler\"\n            });\n            finalAssertExports.isType(route.method, \"string\", {\n                moduleName: \"serwist\",\n                className: \"Serwist\",\n                funcName: \"registerRoute\",\n                paramName: \"route.method\"\n            });\n        }\n        if (!this._routes.has(route.method)) {\n            this._routes.set(route.method, []);\n        }\n        this._routes.get(route.method).push(route);\n    }\n    unregisterRoute(route) {\n        if (!this._routes.has(route.method)) {\n            throw new SerwistError(\"unregister-route-but-not-found-with-method\", {\n                method: route.method\n            });\n        }\n        const routeIndex = this._routes.get(route.method).indexOf(route);\n        if (routeIndex > -1) {\n            this._routes.get(route.method).splice(routeIndex, 1);\n        } else {\n            throw new SerwistError(\"unregister-route-route-not-registered\");\n        }\n    }\n    getUrlsToPrecacheKeys() {\n        return this._urlsToCacheKeys;\n    }\n    getPrecachedUrls() {\n        return [\n            ...this._urlsToCacheKeys.keys()\n        ];\n    }\n    getPrecacheKeyForUrl(url) {\n        const urlObject = new URL(url, location.href);\n        return this._urlsToCacheKeys.get(urlObject.href);\n    }\n    getIntegrityForPrecacheKey(cacheKey) {\n        return this._cacheKeysToIntegrities.get(cacheKey);\n    }\n    async matchPrecache(request) {\n        const url = request instanceof Request ? request.url : request;\n        const cacheKey = this.getPrecacheKeyForUrl(url);\n        if (cacheKey) {\n            const cache = await self.caches.open(this.precacheStrategy.cacheName);\n            return cache.match(cacheKey);\n        }\n        return undefined;\n    }\n    createHandlerBoundToUrl(url) {\n        const cacheKey = this.getPrecacheKeyForUrl(url);\n        if (!cacheKey) {\n            throw new SerwistError(\"non-precached-url\", {\n                url\n            });\n        }\n        return (options)=>{\n            options.request = new Request(url);\n            options.params = {\n                cacheKey,\n                ...options.params\n            };\n            return this.precacheStrategy.handle(options);\n        };\n    }\n    handleRequest({ request, event }) {\n        if (process.env.NODE_ENV !== \"production\") {\n            finalAssertExports.isInstance(request, Request, {\n                moduleName: \"serwist\",\n                className: \"Serwist\",\n                funcName: \"handleRequest\",\n                paramName: \"options.request\"\n            });\n        }\n        const url = new URL(request.url, location.href);\n        if (!url.protocol.startsWith(\"http\")) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.debug(\"Router only supports URLs that start with 'http'.\");\n            }\n            return;\n        }\n        const sameOrigin = url.origin === location.origin;\n        const { params, route } = this.findMatchingRoute({\n            event,\n            request,\n            sameOrigin,\n            url\n        });\n        let handler = route?.handler;\n        const debugMessages = [];\n        if (process.env.NODE_ENV !== \"production\") {\n            if (handler) {\n                debugMessages.push([\n                    \"Found a route to handle this request:\",\n                    route\n                ]);\n                if (params) {\n                    debugMessages.push([\n                        `Passing the following params to the route's handler:`,\n                        params\n                    ]);\n                }\n            }\n        }\n        const method = request.method;\n        if (!handler && this._defaultHandlerMap.has(method)) {\n            if (process.env.NODE_ENV !== \"production\") {\n                debugMessages.push(`Failed to find a matching route. Falling back to the default handler for ${method}.`);\n            }\n            handler = this._defaultHandlerMap.get(method);\n        }\n        if (!handler) {\n            if (process.env.NODE_ENV !== \"production\") {\n                logger.debug(`No route found for: ${getFriendlyURL(url)}`);\n            }\n            return;\n        }\n        if (process.env.NODE_ENV !== \"production\") {\n            logger.groupCollapsed(`Router is responding to: ${getFriendlyURL(url)}`);\n            for (const msg of debugMessages){\n                if (Array.isArray(msg)) {\n                    logger.log(...msg);\n                } else {\n                    logger.log(msg);\n                }\n            }\n            logger.groupEnd();\n        }\n        let responsePromise;\n        try {\n            responsePromise = handler.handle({\n                url,\n                request,\n                event,\n                params\n            });\n        } catch (err) {\n            responsePromise = Promise.reject(err);\n        }\n        const catchHandler = route?.catchHandler;\n        if (responsePromise instanceof Promise && (this._catchHandler || catchHandler)) {\n            responsePromise = responsePromise.catch(async (err)=>{\n                if (catchHandler) {\n                    if (process.env.NODE_ENV !== \"production\") {\n                        logger.groupCollapsed(`Error thrown when responding to:  ${getFriendlyURL(url)}. Falling back to route's Catch Handler.`);\n                        logger.error(\"Error thrown by:\", route);\n                        logger.error(err);\n                        logger.groupEnd();\n                    }\n                    try {\n                        return await catchHandler.handle({\n                            url,\n                            request,\n                            event,\n                            params\n                        });\n                    } catch (catchErr) {\n                        if (catchErr instanceof Error) {\n                            err = catchErr;\n                        }\n                    }\n                }\n                if (this._catchHandler) {\n                    if (process.env.NODE_ENV !== \"production\") {\n                        logger.groupCollapsed(`Error thrown when responding to:  ${getFriendlyURL(url)}. Falling back to global Catch Handler.`);\n                        logger.error(\"Error thrown by:\", route);\n                        logger.error(err);\n                        logger.groupEnd();\n                    }\n                    return this._catchHandler.handle({\n                        url,\n                        request,\n                        event\n                    });\n                }\n                throw err;\n            });\n        }\n        return responsePromise;\n    }\n    findMatchingRoute({ url, sameOrigin, request, event }) {\n        const routes = this._routes.get(request.method) || [];\n        for (const route of routes){\n            let params;\n            const matchResult = route.match({\n                url,\n                sameOrigin,\n                request,\n                event\n            });\n            if (matchResult) {\n                if (process.env.NODE_ENV !== \"production\") {\n                    if (matchResult instanceof Promise) {\n                        logger.warn(`While routing ${getFriendlyURL(url)}, an async matchCallback function was used. Please convert the following route to use a synchronous matchCallback function:`, route);\n                    }\n                }\n                params = matchResult;\n                if (Array.isArray(params) && params.length === 0) {\n                    params = undefined;\n                } else if (matchResult.constructor === Object && Object.keys(matchResult).length === 0) {\n                    params = undefined;\n                } else if (typeof matchResult === \"boolean\") {\n                    params = undefined;\n                }\n                return {\n                    route,\n                    params\n                };\n            }\n        }\n        return {};\n    }\n}\n\nexport { BROADCAST_UPDATE_DEFAULT_HEADERS, BackgroundSyncPlugin, BroadcastCacheUpdate, BroadcastUpdatePlugin, CacheExpiration, CacheFirst, CacheOnly, CacheableResponse, CacheableResponsePlugin, ExpirationPlugin, NavigationRoute, NetworkFirst, NetworkOnly, PrecacheFallbackPlugin, PrecacheRoute, PrecacheStrategy, RangeRequestsPlugin, Route, Serwist, StaleWhileRevalidate, Strategy, cacheNames, createPartialResponse, disableDevLogs, enableNavigationPreload, initializeGoogleAnalytics, registerQuotaErrorCallback, responsesAreSame, setCacheNameDetails };\n", "import { NetworkOnly, CacheFirst, StaleWhileRevalidate, NetworkFirst, ExpirationPlugin, RangeRequestsPlugin } from 'serwist';\n\nconst PAGES_CACHE_NAME = {\n    rscPrefetch: \"pages-rsc-prefetch\",\n    rsc: \"pages-rsc\",\n    html: \"pages\"\n};\nconst defaultCache = process.env.NODE_ENV !== \"production\" ? [\n    {\n        matcher: /.*/i,\n        handler: new NetworkOnly()\n    }\n] : [\n    {\n        matcher: /^https:\\/\\/fonts\\.(?:gstatic)\\.com\\/.*/i,\n        handler: new CacheFirst({\n            cacheName: \"google-fonts-webfonts\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 4,\n                    maxAgeSeconds: 365 * 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /^https:\\/\\/fonts\\.(?:googleapis)\\.com\\/.*/i,\n        handler: new StaleWhileRevalidate({\n            cacheName: \"google-fonts-stylesheets\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 4,\n                    maxAgeSeconds: 7 * 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /\\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,\n        handler: new StaleWhileRevalidate({\n            cacheName: \"static-font-assets\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 4,\n                    maxAgeSeconds: 7 * 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /\\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,\n        handler: new StaleWhileRevalidate({\n            cacheName: \"static-image-assets\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 64,\n                    maxAgeSeconds: 30 * 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /\\/_next\\/static.+\\.js$/i,\n        handler: new CacheFirst({\n            cacheName: \"next-static-js-assets\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 64,\n                    maxAgeSeconds: 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /\\/_next\\/image\\?url=.+$/i,\n        handler: new StaleWhileRevalidate({\n            cacheName: \"next-image\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 64,\n                    maxAgeSeconds: 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /\\.(?:mp3|wav|ogg)$/i,\n        handler: new CacheFirst({\n            cacheName: \"static-audio-assets\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                }),\n                new RangeRequestsPlugin()\n            ]\n        })\n    },\n    {\n        matcher: /\\.(?:mp4|webm)$/i,\n        handler: new CacheFirst({\n            cacheName: \"static-video-assets\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                }),\n                new RangeRequestsPlugin()\n            ]\n        })\n    },\n    {\n        matcher: /\\.(?:js)$/i,\n        handler: new StaleWhileRevalidate({\n            cacheName: \"static-js-assets\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 48,\n                    maxAgeSeconds: 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /\\.(?:css|less)$/i,\n        handler: new StaleWhileRevalidate({\n            cacheName: \"static-style-assets\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /\\/_next\\/data\\/.+\\/.+\\.json$/i,\n        handler: new NetworkFirst({\n            cacheName: \"next-data\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /\\.(?:json|xml|csv)$/i,\n        handler: new NetworkFirst({\n            cacheName: \"static-data-assets\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ]\n        })\n    },\n    {\n        matcher: /\\/api\\/auth\\/.*/,\n        handler: new NetworkOnly({\n            networkTimeoutSeconds: 10\n        })\n    },\n    {\n        matcher: ({ sameOrigin, url: { pathname } })=>sameOrigin && pathname.startsWith(\"/api/\"),\n        method: \"GET\",\n        handler: new NetworkFirst({\n            cacheName: \"apis\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 16,\n                    maxAgeSeconds: 24 * 60 * 60,\n                    maxAgeFrom: \"last-used\"\n                })\n            ],\n            networkTimeoutSeconds: 10\n        })\n    },\n    {\n        matcher: ({ request, url: { pathname }, sameOrigin })=>request.headers.get(\"RSC\") === \"1\" && request.headers.get(\"Next-Router-Prefetch\") === \"1\" && sameOrigin && !pathname.startsWith(\"/api/\"),\n        handler: new NetworkFirst({\n            cacheName: PAGES_CACHE_NAME.rscPrefetch,\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 24 * 60 * 60\n                })\n            ]\n        })\n    },\n    {\n        matcher: ({ request, url: { pathname }, sameOrigin })=>request.headers.get(\"RSC\") === \"1\" && sameOrigin && !pathname.startsWith(\"/api/\"),\n        handler: new NetworkFirst({\n            cacheName: PAGES_CACHE_NAME.rsc,\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 24 * 60 * 60\n                })\n            ]\n        })\n    },\n    {\n        matcher: ({ request, url: { pathname }, sameOrigin })=>request.headers.get(\"Content-Type\")?.includes(\"text/html\") && sameOrigin && !pathname.startsWith(\"/api/\"),\n        handler: new NetworkFirst({\n            cacheName: PAGES_CACHE_NAME.html,\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 24 * 60 * 60\n                })\n            ]\n        })\n    },\n    {\n        matcher: ({ url: { pathname }, sameOrigin })=>sameOrigin && !pathname.startsWith(\"/api/\"),\n        handler: new NetworkFirst({\n            cacheName: \"others\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 24 * 60 * 60\n                })\n            ]\n        })\n    },\n    {\n        matcher: ({ sameOrigin })=>!sameOrigin,\n        handler: new NetworkFirst({\n            cacheName: \"cross-origin\",\n            plugins: [\n                new ExpirationPlugin({\n                    maxEntries: 32,\n                    maxAgeSeconds: 60 * 60\n                })\n            ],\n            networkTimeoutSeconds: 10\n        })\n    },\n    {\n        matcher: /.*/i,\n        method: \"GET\",\n        handler: new NetworkOnly()\n    }\n];\n\nexport { PAGES_CACHE_NAME, defaultCache };\n", "/// <reference no-default-lib=\"true\" />\n/// <reference lib=\"esnext\" />\n/// <reference lib=\"webworker\" />\nimport { defaultCache } from \"@serwist/turbopack/worker\";\nimport type { PrecacheEntry, SerwistGlobalConfig } from \"serwist\";\nimport { Serwist } from \"serwist\";\n\ndeclare global {\n    interface WorkerGlobalScope extends SerwistGlobalConfig {\n        __SW_MANIFEST: (PrecacheEntry | string)[] | undefined;\n    }\n}\n\nconst serwist = new Serwist({\n    precacheEntries: self.__SW_MANIFEST,\n    skipWaiting: true,\n    clientsClaim: true,\n    navigationPreload: true,\n    runtimeCaching: defaultCache\n});\n\nserwist.addEventListeners();\n"],
  "mappings": "+mCAAA,IAAAA,EAAA,CACE,CACE,IAAO,sDACP,SAAY,IACd,EACA,CACE,IAAO,qEACP,SAAY,IACd,EACA,CACE,IAAO,wDACP,SAAY,IACd,EACA,CACE,IAAO,qDACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,4CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,4CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,4CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,2CACP,SAAY,IACd,EACA,CACE,IAAO,cACP,SAAY,kCACd,EACA,CACE,IAAO,iBACP,SAAY,kCACd,EACA,CACE,IAAO,mBACP,SAAY,kCACd,EACA,CACE,IAAO,mBACP,SAAY,kCACd,EACA,CACE,IAAO,6BACP,SAAY,kCACd,EACA,CACE,IAAO,iBACP,SAAY,kCACd,EACA,CACE,IAAO,eACP,SAAY,kCACd,EACA,CACE,IAAO,gCACP,SAAY,kCACd,EACA,CACE,IAAO,0BACP,SAAY,kCACd,EACA,CACE,IAAO,mCACP,SAAY,kCACd,EACA,CACE,IAAO,4BACP,SAAY,kCACd,EACA,CACE,IAAO,2BACP,SAAY,kCACd,EACA,CACE,IAAO,0BACP,SAAY,kCACd,EACA,CACE,IAAO,2BACP,SAAY,kCACd,EACA,CACE,IAAO,mCACP,SAAY,kCACd,EACA,CACE,IAAO,6BACP,SAAY,kCACd,EACA,CACE,IAAO,mCACP,SAAY,kCACd,EACA,CACE,IAAO,+BACP,SAAY,kCACd,CACF,ECrpBA,IAAMC,EAAoB,CACtB,gBAAiB,kBACjB,SAAU,cACV,OAAQ,UACR,QAAS,UACT,OAAQ,OAAO,aAAiB,IAAc,aAAa,MAAQ,EACvE,EACMC,GAAoBC,GACf,CACHF,EAAkB,OAClBE,EACAF,EAAkB,MACtB,EAAE,OAAQG,GAAQA,GAASA,EAAM,OAAS,CAAC,EAAE,KAAK,GAAG,EAEnDC,GAAuBC,GAAK,CAC9B,QAAWC,KAAO,OAAO,KAAKN,CAAiB,EAC3CK,EAAGC,CAAG,CAEd,EACMC,EAAa,CACf,cAAgBC,GAAU,CACtBJ,GAAqBE,GAAM,CACvB,IAAMG,EAASD,EAAQF,CAAG,EACtB,OAAOG,GAAW,WAClBT,EAAkBM,CAAG,EAAIG,EAEjC,CAAC,CACL,EACA,uBAAyBC,GACdA,GAAiBT,GAAiBD,EAAkB,eAAe,EAE9E,gBAAkBU,GACPA,GAAiBT,GAAiBD,EAAkB,QAAQ,EAEvE,UAAW,IACAA,EAAkB,OAE7B,eAAiBU,GACNA,GAAiBT,GAAiBD,EAAkB,OAAO,EAEtE,UAAW,IACAA,EAAkB,MAEjC,EAEIW,EACJ,SAASC,IAAqC,CAC1C,GAAID,IAAkB,OAAW,CAC7B,IAAME,EAAe,IAAI,SAAS,EAAE,EACpC,GAAI,SAAUA,EACV,GAAI,CACA,IAAI,SAASA,EAAa,IAAI,EAC9BF,EAAgB,EACpB,OAAS,GACLA,EAAgB,EACpB,CAEJA,EAAgB,EACpB,CACA,OAAOA,CACX,CAqKA,IAAMG,GAAW,CAACC,KAASC,IAAO,CAC9B,IAAIC,EAAMF,EACV,OAAIC,EAAK,OAAS,IACdC,GAAO,OAAO,YAAK,UAAUD,CAAI,IAE9BC,CACX,EAQA,IAAMC,GAA2DC,GAE3DC,EAAN,cAA2B,KAAM,CAE7B,YAAYC,EAAWC,EAAQ,CAC3B,IAAMC,EAAUL,GAAiBG,EAAWC,CAAO,EACnD,MAAMC,CAAO,EAHjBC,EAAA,gBAII,KAAK,KAAOH,EACZ,KAAK,QAAUC,CACnB,CACJ,EAoDA,IAAMG,GAAkBC,GACL,IAAI,IAAI,OAAOA,CAAG,EAAG,SAAS,IAAI,EACnC,KAAK,QAAQ,IAAI,OAAO,IAAI,gBAAS,OAAQ,EAAG,EAAE,EAsDpE,SAASC,EAAQC,EAAI,CACjB,OAAO,IAAI,QAASC,GAAU,WAAWA,EAASD,CAAE,CAAC,CACzD,CAEA,IAAME,GAAsB,IAAI,IAEhC,SAASC,GAAYC,EAASC,EAAc,CACxC,IAAMC,EAAc,IAAI,IAAIF,CAAO,EACnC,QAAWG,KAASF,EAChBC,EAAY,aAAa,OAAOC,CAAK,EAEzC,OAAOD,EAAY,IACvB,CACA,eAAeE,GAAuBC,EAAOC,EAASL,EAAcM,EAAc,CAC9E,IAAMC,EAAqBT,GAAYO,EAAQ,IAAKL,CAAY,EAChE,GAAIK,EAAQ,MAAQE,EAChB,OAAOH,EAAM,MAAMC,EAASC,CAAY,EAE5C,IAAME,EAAcC,EAAAC,EAAA,GACbJ,GADa,CAEhB,aAAc,EAClB,GACMK,EAAY,MAAMP,EAAM,KAAKC,EAASG,CAAW,EACvD,QAAWI,KAAYD,EAAU,CAC7B,IAAME,EAAsBf,GAAYc,EAAS,IAAKZ,CAAY,EAClE,GAAIO,IAAuBM,EACvB,OAAOT,EAAM,MAAMQ,EAAUN,CAAY,CAEjD,CAEJ,CAEA,IAAMQ,EAAN,KAAe,CAIX,aAAa,CAHbC,EAAA,gBACAA,EAAA,gBACAA,EAAA,eAEI,KAAK,QAAU,IAAI,QAAQ,CAACnB,EAASoB,IAAS,CAC1C,KAAK,QAAUpB,EACf,KAAK,OAASoB,CAClB,CAAC,CACL,CACJ,EAEMC,GAA6B,SAAU,CAIzC,QAAWC,KAAYrB,GACnB,MAAMqB,EAAS,CAQvB,EAEMC,GAAoB,aACpBC,GAAuB,MAAOC,EAAqBC,EAAkBH,KAAoB,CAE3F,IAAMI,GADa,MAAM,KAAK,OAAO,KAAK,GACJ,OAAQC,GACnCA,EAAU,SAASF,CAAe,GAAKE,EAAU,SAAS,KAAK,aAAa,KAAK,GAAKA,IAAcH,CAC9G,EACD,aAAM,QAAQ,IAAIE,EAAmB,IAAKC,GAAY,KAAK,OAAO,OAAOA,CAAS,CAAC,CAAC,EAC7ED,CACX,EAEME,GAAyBD,GAAY,CACvC,KAAK,iBAAiB,WAAaE,GAAQ,CACvCA,EAAM,UAAUN,GAAqBO,EAAW,gBAAgBH,CAAS,CAAC,EAAE,KAAMI,GAAgB,CAMlG,CAAC,CAAC,CACN,CAAC,CACL,EAEMC,GAAe,IAAI,CACrB,KAAK,iBAAiB,WAAY,IAAI,KAAK,QAAQ,MAAM,CAAC,CAC9D,EAEMC,GAAY,CAACJ,EAAOK,IAAU,CAChC,IAAMC,EAAgBD,EAAQ,EAC9B,OAAAL,EAAM,UAAUM,CAAa,EACtBA,CACX,EC9bA,IAAMC,GAAgB,CAACC,EAAQC,IAAiBA,EAAa,KAAMC,GAAMF,aAAkBE,CAAC,EAExFC,GACAC,GAEJ,SAASC,IAAuB,CAC5B,OAAQF,KACHA,GAAoB,CACjB,YACA,eACA,SACA,UACA,cACJ,EACR,CAEA,SAASG,IAA0B,CAC/B,OAAQF,KACHA,GAAuB,CACpB,UAAU,UAAU,QACpB,UAAU,UAAU,SACpB,UAAU,UAAU,kBACxB,EACR,CACA,IAAMG,GAAqB,IAAI,QACzBC,GAAiB,IAAI,QACrBC,EAAwB,IAAI,QAClC,SAASC,GAAiBC,EAAS,CAC/B,IAAMC,EAAU,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC7C,IAAMC,EAAW,IAAM,CACnBJ,EAAQ,oBAAoB,UAAWK,CAAO,EAC9CL,EAAQ,oBAAoB,QAASM,CAAK,CAC9C,EACMD,EAAU,IAAM,CAClBH,EAAQK,EAAKP,EAAQ,MAAM,CAAC,EAC5BI,EAAS,CACb,EACME,EAAQ,IAAM,CAChBH,EAAOH,EAAQ,KAAK,EACpBI,EAAS,CACb,EACAJ,EAAQ,iBAAiB,UAAWK,CAAO,EAC3CL,EAAQ,iBAAiB,QAASM,CAAK,CAC3C,CAAC,EAGD,OAAAR,EAAsB,IAAIG,EAASD,CAAO,EACnCC,CACX,CACA,SAASO,GAA+BC,EAAI,CAExC,GAAIb,GAAmB,IAAIa,CAAE,EACzB,OACJ,IAAMC,EAAO,IAAI,QAAQ,CAACR,EAASC,IAAW,CAC1C,IAAMC,EAAW,IAAM,CACnBK,EAAG,oBAAoB,WAAYE,CAAQ,EAC3CF,EAAG,oBAAoB,QAASH,CAAK,EACrCG,EAAG,oBAAoB,QAASH,CAAK,CACzC,EACMK,EAAW,IAAM,CACnBT,EAAQ,EACRE,EAAS,CACb,EACME,EAAQ,IAAM,CAChBH,EAAOM,EAAG,OAAS,IAAI,aAAa,aAAc,YAAY,CAAC,EAC/DL,EAAS,CACb,EACAK,EAAG,iBAAiB,WAAYE,CAAQ,EACxCF,EAAG,iBAAiB,QAASH,CAAK,EAClCG,EAAG,iBAAiB,QAASH,CAAK,CACtC,CAAC,EAEDV,GAAmB,IAAIa,EAAIC,CAAI,CACnC,CACA,IAAIE,GAAgB,CAChB,IAAIC,EAAQC,EAAMC,EAAU,CACxB,GAAIF,aAAkB,eAAgB,CAElC,GAAIC,IAAS,OACT,OAAOlB,GAAmB,IAAIiB,CAAM,EAExC,GAAIC,IAAS,QACT,OAAOC,EAAS,iBAAiB,CAAC,EAC5B,OACAA,EAAS,YAAYA,EAAS,iBAAiB,CAAC,CAAC,CAE/D,CAEA,OAAOR,EAAKM,EAAOC,CAAI,CAAC,CAC5B,EACA,IAAID,EAAQC,EAAME,EAAO,CACrB,OAAAH,EAAOC,CAAI,EAAIE,EACR,EACX,EACA,IAAIH,EAAQC,EAAM,CACd,OAAID,aAAkB,iBACjBC,IAAS,QAAUA,IAAS,SACtB,GAEJA,KAAQD,CACnB,CACJ,EACA,SAASI,GAAaC,EAAU,CAC5BN,GAAgBM,EAASN,EAAa,CAC1C,CACA,SAASO,GAAaC,EAAM,CAQxB,OAAIzB,GAAwB,EAAE,SAASyB,CAAI,EAChC,YAAaC,EAAM,CAGtB,OAAAD,EAAK,MAAME,GAAO,IAAI,EAAGD,CAAI,EACtBd,EAAK,KAAK,OAAO,CAC5B,EAEG,YAAac,EAAM,CAGtB,OAAOd,EAAKa,EAAK,MAAME,GAAO,IAAI,EAAGD,CAAI,CAAC,CAC9C,CACJ,CACA,SAASE,GAAuBP,EAAO,CACnC,OAAI,OAAOA,GAAU,WACVG,GAAaH,CAAK,GAGzBA,aAAiB,gBACjBR,GAA+BQ,CAAK,EACpC5B,GAAc4B,EAAOtB,GAAqB,CAAC,EACpC,IAAI,MAAMsB,EAAOJ,EAAa,EAElCI,EACX,CACA,SAAST,EAAKS,EAAO,CAGjB,GAAIA,aAAiB,WACjB,OAAOjB,GAAiBiB,CAAK,EAGjC,GAAInB,GAAe,IAAImB,CAAK,EACxB,OAAOnB,GAAe,IAAImB,CAAK,EACnC,IAAMQ,EAAWD,GAAuBP,CAAK,EAG7C,OAAIQ,IAAaR,IACbnB,GAAe,IAAImB,EAAOQ,CAAQ,EAClC1B,EAAsB,IAAI0B,EAAUR,CAAK,GAEtCQ,CACX,CACA,IAAMF,GAAUN,GAAUlB,EAAsB,IAAIkB,CAAK,EASzD,SAASS,EAAOC,EAAMC,EAAS,CAAE,QAAAC,EAAS,QAAAC,EAAS,SAAAC,EAAU,WAAAC,CAAW,EAAI,CAAC,EAAG,CAC5E,IAAM/B,EAAU,UAAU,KAAK0B,EAAMC,CAAO,EACtCK,EAAczB,EAAKP,CAAO,EAChC,OAAI6B,GACA7B,EAAQ,iBAAiB,gBAAkBiC,GAAU,CACjDJ,EAAQtB,EAAKP,EAAQ,MAAM,EAAGiC,EAAM,WAAYA,EAAM,WAAY1B,EAAKP,EAAQ,WAAW,EAAGiC,CAAK,CACtG,CAAC,EAEDL,GACA5B,EAAQ,iBAAiB,UAAYiC,GAAUL,EAE/CK,EAAM,WAAYA,EAAM,WAAYA,CAAK,CAAC,EAE9CD,EACK,KAAME,GAAO,CACVH,GACAG,EAAG,iBAAiB,QAAS,IAAMH,EAAW,CAAC,EAC/CD,GACAI,EAAG,iBAAiB,gBAAkBD,GAAUH,EAASG,EAAM,WAAYA,EAAM,WAAYA,CAAK,CAAC,CAE3G,CAAC,EACI,MAAM,IAAM,CAAE,CAAC,EACbD,CACX,CAMA,SAASG,GAAST,EAAM,CAAE,QAAAE,CAAQ,EAAI,CAAC,EAAG,CACtC,IAAM5B,EAAU,UAAU,eAAe0B,CAAI,EAC7C,OAAIE,GACA5B,EAAQ,iBAAiB,UAAYiC,GAAUL,EAE/CK,EAAM,WAAYA,CAAK,CAAC,EAErB1B,EAAKP,CAAO,EAAE,KAAK,IAAG,EAAY,CAC7C,CAEA,IAAMoC,GAAc,CAAC,MAAO,SAAU,SAAU,aAAc,OAAO,EAC/DC,GAAe,CAAC,MAAO,MAAO,SAAU,OAAO,EAC/CC,GAAgB,IAAI,IAC1B,SAASC,GAAU1B,EAAQC,EAAM,CAC7B,GAAI,EAAED,aAAkB,aACpB,EAAEC,KAAQD,IACV,OAAOC,GAAS,UAChB,OAEJ,GAAIwB,GAAc,IAAIxB,CAAI,EACtB,OAAOwB,GAAc,IAAIxB,CAAI,EACjC,IAAM0B,EAAiB1B,EAAK,QAAQ,aAAc,EAAE,EAC9C2B,EAAW3B,IAAS0B,EACpBE,EAAUL,GAAa,SAASG,CAAc,EACpD,GAEA,EAAEA,KAAmBC,EAAW,SAAW,gBAAgB,YACvD,EAAEC,GAAWN,GAAY,SAASI,CAAc,GAChD,OAEJ,IAAMG,EAAS,eAAgBC,KAAcvB,EAAM,CAE/C,IAAMZ,EAAK,KAAK,YAAYmC,EAAWF,EAAU,YAAc,UAAU,EACrE7B,EAASJ,EAAG,MAChB,OAAIgC,IACA5B,EAASA,EAAO,MAAMQ,EAAK,MAAM,CAAC,IAM9B,MAAM,QAAQ,IAAI,CACtBR,EAAO2B,CAAc,EAAE,GAAGnB,CAAI,EAC9BqB,GAAWjC,EAAG,IAClB,CAAC,GAAG,CAAC,CACT,EACA,OAAA6B,GAAc,IAAIxB,EAAM6B,CAAM,EACvBA,CACX,CACA1B,GAAc4B,GAAcC,EAAAC,EAAA,GACrBF,GADqB,CAExB,IAAK,CAAChC,EAAQC,EAAMC,IAAawB,GAAU1B,EAAQC,CAAI,GAAK+B,EAAS,IAAIhC,EAAQC,EAAMC,CAAQ,EAC/F,IAAK,CAACF,EAAQC,IAAS,CAAC,CAACyB,GAAU1B,EAAQC,CAAI,GAAK+B,EAAS,IAAIhC,EAAQC,CAAI,CACjF,EAAE,EAEF,IAAMkC,GAAqB,CAAC,WAAY,qBAAsB,SAAS,EACjEC,GAAY,CAAC,EACbC,GAAiB,IAAI,QACrBC,GAAmC,IAAI,QACvCC,GAAsB,CACxB,IAAIvC,EAAQC,EAAM,CACd,GAAI,CAACkC,GAAmB,SAASlC,CAAI,EACjC,OAAOD,EAAOC,CAAI,EACtB,IAAIuC,EAAaJ,GAAUnC,CAAI,EAC/B,OAAKuC,IACDA,EAAaJ,GAAUnC,CAAI,EAAI,YAAaO,EAAM,CAC9C6B,GAAe,IAAI,KAAMC,GAAiC,IAAI,IAAI,EAAErC,CAAI,EAAE,GAAGO,CAAI,CAAC,CACtF,GAEGgC,CACX,CACJ,EACA,SAAgBC,MAAWjC,EAAM,QAAAkC,GAAA,sBAE7B,IAAIC,EAAS,KAIb,GAHMA,aAAkB,YACpBA,EAAS,UAAAC,EAAMD,EAAO,WAAW,GAAGnC,CAAI,IAExC,CAACmC,EACD,OACJA,EAASA,EACT,IAAME,EAAgB,IAAI,MAAMF,EAAQJ,EAAmB,EAI3D,IAHAD,GAAiC,IAAIO,EAAeF,CAAM,EAE1D1D,EAAsB,IAAI4D,EAAepC,GAAOkC,CAAM,CAAC,EAChDA,GACH,MAAME,EAENF,EAAS,UAAAC,EAAOP,GAAe,IAAIQ,CAAa,GAAKF,EAAO,SAAS,GACrEN,GAAe,OAAOQ,CAAa,CAE3C,GACA,SAASC,GAAe9C,EAAQC,EAAM,CAClC,OAASA,IAAS,OAAO,eACrB1B,GAAcyB,EAAQ,CAAC,SAAU,eAAgB,SAAS,CAAC,GAC1DC,IAAS,WAAa1B,GAAcyB,EAAQ,CAAC,SAAU,cAAc,CAAC,CAC/E,CACAI,GAAc4B,GAAcC,EAAAC,EAAA,GACrBF,GADqB,CAExB,IAAIhC,EAAQC,EAAMC,EAAU,CACxB,OAAI4C,GAAe9C,EAAQC,CAAI,EACpBwC,GACJT,EAAS,IAAIhC,EAAQC,EAAMC,CAAQ,CAC9C,EACA,IAAIF,EAAQC,EAAM,CACd,OAAO6C,GAAe9C,EAAQC,CAAI,GAAK+B,EAAS,IAAIhC,EAAQC,CAAI,CACpE,CACJ,EAAE,EC3SF,IAAM8C,GAAe,MAAOC,EAAUC,IAAW,CAC7C,IAAIC,EAAS,KAKb,GAJIF,EAAS,MAETE,EADoB,IAAI,IAAIF,EAAS,GAAG,EACnB,QAErBE,IAAW,KAAK,SAAS,OACzB,MAAM,IAAIC,EAAa,6BAA8B,CACjD,OAAAD,CACJ,CAAC,EAEL,IAAME,EAAiBJ,EAAS,MAAM,EAChCK,EAAe,CACjB,QAAS,IAAI,QAAQD,EAAe,OAAO,EAC3C,OAAQA,EAAe,OACvB,WAAYA,EAAe,UAC/B,EACME,EAAuBL,EAAWA,EAASI,CAAY,EAAIA,EAC3DE,EAAOC,GAAmC,EAAIJ,EAAe,KAAO,MAAMA,EAAe,KAAK,EACpG,OAAO,IAAI,SAASG,EAAMD,CAAoB,CAClD,EAEMG,GAAiB,IAAI,CACvB,KAAK,sBAAwB,EACjC,EAEMC,GAA6B,EAC7BC,GAA0B,0BAC1BC,EAA4B,WAC5BC,EAAmB,YACnBC,GAAN,KAA4B,CAA5B,cACIC,EAAA,WAAM,MACN,MAAM,SAASC,EAAO,CAElB,IAAMC,GADK,MAAM,KAAK,MAAM,GACd,YAAYL,EAA2B,YAAa,CAC9D,WAAY,SAChB,CAAC,EACD,MAAMK,EAAG,MAAM,IAAID,CAAK,EACxB,MAAMC,EAAG,IACb,CACA,MAAM,iBAAkB,CAEpB,IAAMC,EAAS,MADJ,MAAM,KAAK,MAAM,GACJ,YAAYN,CAAyB,EAAE,MAAM,WAAW,EAChF,OAAOM,GAAA,YAAAA,EAAQ,MAAM,EACzB,CACA,MAAM,yBAAyBC,EAAW,CAEtC,IAAMC,EAAU,MADL,MAAM,KAAK,MAAM,GACH,gBAAgBR,EAA2BC,EAAkB,YAAY,KAAKM,CAAS,CAAC,EACjH,OAAOC,GAAoB,CAAC,CAChC,CACA,MAAM,yBAAyBD,EAAW,CAEtC,OADW,MAAM,KAAK,MAAM,GAClB,eAAeP,EAA2BC,EAAkB,YAAY,KAAKM,CAAS,CAAC,CACrG,CACA,MAAM,YAAYE,EAAI,CAElB,MADW,MAAM,KAAK,MAAM,GACnB,OAAOT,EAA2BS,CAAE,CACjD,CACA,MAAM,yBAAyBF,EAAW,CACtC,OAAO,MAAM,KAAK,qBAAqB,YAAY,KAAKA,CAAS,EAAG,MAAM,CAC9E,CACA,MAAM,wBAAwBA,EAAW,CACrC,OAAO,MAAM,KAAK,qBAAqB,YAAY,KAAKA,CAAS,EAAG,MAAM,CAC9E,CACA,MAAM,qBAAqBG,EAAOC,EAAW,CAEzC,IAAML,EAAS,MADJ,MAAM,KAAK,MAAM,GACJ,YAAYN,CAAyB,EAAE,MAAM,MAAMC,CAAgB,EAAE,WAAWS,EAAOC,CAAS,EACxH,OAAOL,GAAA,YAAAA,EAAQ,KACnB,CACA,MAAM,OAAQ,CACV,OAAK,KAAK,MACN,KAAK,IAAM,MAAMM,EAAOb,GAAyBD,GAA4B,CACzE,QAAS,KAAK,UAClB,CAAC,GAEE,KAAK,GAChB,CACA,WAAWe,EAAIC,EAAY,CACnBA,EAAa,GAAKA,EAAahB,IAC3Be,EAAG,iBAAiB,SAASb,CAAyB,GACtDa,EAAG,kBAAkBb,CAAyB,EAGrCa,EAAG,kBAAkBb,EAA2B,CAC7D,cAAe,GACf,QAAS,IACb,CAAC,EACQ,YAAYC,EAAkBA,EAAkB,CACrD,OAAQ,EACZ,CAAC,CACL,CACJ,EAEMc,EAAN,KAA+B,CAG3B,YAAYR,EAAU,CAFtBJ,EAAA,mBACAA,EAAA,iBAEI,KAAK,WAAaI,EAClB,KAAK,SAAW,IAAIL,EACxB,CACA,MAAM,UAAUE,EAAO,CAenB,OAAOA,EAAM,GACbA,EAAM,UAAY,KAAK,WACvB,MAAM,KAAK,SAAS,SAASA,CAAK,CACtC,CACA,MAAM,aAAaA,EAAO,CAetB,IAAMY,EAAU,MAAM,KAAK,SAAS,gBAAgB,EAChDA,EACAZ,EAAM,GAAKY,EAAU,EAErB,OAAOZ,EAAM,GAEjBA,EAAM,UAAY,KAAK,WACvB,MAAM,KAAK,SAAS,SAASA,CAAK,CACtC,CACA,MAAM,UAAW,CACb,OAAO,KAAK,aAAa,MAAM,KAAK,SAAS,wBAAwB,KAAK,UAAU,CAAC,CACzF,CACA,MAAM,YAAa,CACf,OAAO,KAAK,aAAa,MAAM,KAAK,SAAS,yBAAyB,KAAK,UAAU,CAAC,CAC1F,CACA,MAAM,QAAS,CACX,OAAO,MAAM,KAAK,SAAS,yBAAyB,KAAK,UAAU,CACvE,CACA,MAAM,MAAO,CACT,OAAO,MAAM,KAAK,SAAS,yBAAyB,KAAK,UAAU,CACvE,CACA,MAAM,YAAYK,EAAI,CAClB,MAAM,KAAK,SAAS,YAAYA,CAAE,CACtC,CACA,MAAM,aAAaL,EAAO,CACtB,OAAIA,GACA,MAAM,KAAK,YAAYA,EAAM,EAAE,EAE5BA,CACX,CACJ,EAEMa,GAAyB,CAC3B,SACA,WACA,iBACA,OACA,cACA,QACA,WACA,YACA,WACJ,EACMC,EAAN,MAAMC,CAAgB,CAoBlB,YAAYC,EAAY,CAnBxBjB,EAAA,qBAkCQiB,EAAY,OAAS,aACrBA,EAAY,KAAO,eAEvB,KAAK,aAAeA,CACxB,CArCA,aAAa,YAAYC,EAAS,CAC9B,IAAMD,EAAc,CAChB,IAAKC,EAAQ,IACb,QAAS,CAAC,CACd,EACIA,EAAQ,SAAW,QACnBD,EAAY,KAAO,MAAMC,EAAQ,MAAM,EAAE,YAAY,GAEzDA,EAAQ,QAAQ,QAAQ,CAACC,EAAOC,IAAM,CAClCH,EAAY,QAAQG,CAAG,EAAID,CAC/B,CAAC,EACD,QAAWE,KAAQP,GACXI,EAAQG,CAAI,IAAM,SAClBJ,EAAYI,CAAI,EAAIH,EAAQG,CAAI,GAGxC,OAAO,IAAIL,EAAgBC,CAAW,CAC1C,CAqBA,UAAW,CACP,IAAMA,EAAc,OAAO,OAAO,CAAC,EAAG,KAAK,YAAY,EACvD,OAAAA,EAAY,QAAU,OAAO,OAAO,CAAC,EAAG,KAAK,aAAa,OAAO,EAC7DA,EAAY,OACZA,EAAY,KAAOA,EAAY,KAAK,MAAM,CAAC,GAExCA,CACX,CACA,WAAY,CACR,OAAO,IAAI,QAAQ,KAAK,aAAa,IAAK,KAAK,YAAY,CAC/D,CACA,OAAQ,CACJ,OAAO,IAAID,EAAgB,KAAK,SAAS,CAAC,CAC9C,CACJ,EAEMM,GAAa,0BACbC,GAAqB,KAAU,EAC/BC,GAAa,IAAI,IACjBC,GAAgBC,GAAkB,CACpC,IAAMC,EAAa,CACf,QAAS,IAAIZ,EAAgBW,EAAgB,WAAW,EAAE,UAAU,EACpE,UAAWA,EAAgB,SAC/B,EACA,OAAIA,EAAgB,WAChBC,EAAW,SAAWD,EAAgB,UAEnCC,CACX,EACMC,EAAN,KAA0B,CAQtB,YAAYC,EAAM,CAAE,kBAAAC,EAAmB,OAAAC,EAAQ,iBAAAC,CAAiB,EAAI,CAAC,EAAE,CAPvEhC,EAAA,cACAA,EAAA,gBACAA,EAAA,0BACAA,EAAA,oBACAA,EAAA,2BACAA,EAAA,uBAAkB,IAClBA,EAAA,gCAA2B,IAEvB,GAAIwB,GAAW,IAAIK,CAAI,EACnB,MAAM,IAAIzC,EAAa,uBAAwB,CAC3C,KAAAyC,CACJ,CAAC,EAELL,GAAW,IAAIK,CAAI,EACnB,KAAK,MAAQA,EACb,KAAK,QAAUE,GAAU,KAAK,eAC9B,KAAK,kBAAoBC,GAAoBT,GAC7C,KAAK,mBAAqB,EAAQO,EAClC,KAAK,YAAc,IAAIlB,EAAyB,KAAK,KAAK,EAC1D,KAAK,iBAAiB,CAC1B,CACA,IAAI,MAAO,CACP,OAAO,KAAK,KAChB,CACA,MAAM,YAAYX,EAAO,CAerB,MAAM,KAAK,YAAYA,EAAO,MAAM,CACxC,CACA,MAAM,eAAeA,EAAO,CAexB,MAAM,KAAK,YAAYA,EAAO,SAAS,CAC3C,CACA,MAAM,YAAa,CACf,OAAO,KAAK,eAAe,KAAK,CACpC,CACA,MAAM,cAAe,CACjB,OAAO,KAAK,eAAe,OAAO,CACtC,CACA,MAAM,QAAS,CACX,IAAMgC,EAAa,MAAM,KAAK,YAAY,OAAO,EAC3CC,EAAM,KAAK,IAAI,EACfC,EAAmB,CAAC,EAC1B,QAAWlC,KAASgC,EAAW,CAC3B,IAAMG,EAAuB,KAAK,kBAAoB,GAAK,IACvDF,EAAMjC,EAAM,UAAYmC,EACxB,MAAM,KAAK,YAAY,YAAYnC,EAAM,EAAE,EAE3CkC,EAAiB,KAAKV,GAAaxB,CAAK,CAAC,CAEjD,CACA,OAAOkC,CACX,CACA,MAAM,MAAO,CACT,OAAO,MAAM,KAAK,YAAY,KAAK,CACvC,CACA,MAAM,YAAY,CAAE,QAAAjB,EAAS,SAAAmB,EAAU,UAAAC,EAAY,KAAK,IAAI,CAAE,EAAGC,EAAW,CAExE,IAAMtC,EAAQ,CACV,aAFoB,MAAMc,EAAgB,YAAYG,EAAQ,MAAM,CAAC,GAExC,SAAS,EACtC,UAAAoB,CACJ,EAIA,OAHID,IACApC,EAAM,SAAWoC,GAEdE,EAAU,CACb,IAAK,OACD,MAAM,KAAK,YAAY,UAAUtC,CAAK,EACtC,MACJ,IAAK,UACD,MAAM,KAAK,YAAY,aAAaA,CAAK,EACzC,KACR,CAII,KAAK,gBACL,KAAK,yBAA2B,GAEhC,MAAM,KAAK,aAAa,CAEhC,CACA,MAAM,eAAesC,EAAW,CAC5B,IAAML,EAAM,KAAK,IAAI,EACjBjC,EACJ,OAAOsC,EAAU,CACb,IAAK,MACDtC,EAAQ,MAAM,KAAK,YAAY,SAAS,EACxC,MACJ,IAAK,QACDA,EAAQ,MAAM,KAAK,YAAY,WAAW,EAC1C,KACR,CACA,GAAIA,EAAO,CACP,IAAMmC,EAAuB,KAAK,kBAAoB,GAAK,IAC3D,OAAIF,EAAMjC,EAAM,UAAYmC,EACjB,KAAK,eAAeG,CAAS,EAEjCd,GAAaxB,CAAK,CAC7B,CAEJ,CACA,MAAM,gBAAiB,CACnB,IAAIA,EACJ,KAAMA,EAAQ,MAAM,KAAK,aAAa,GAClC,GAAI,CACA,MAAM,MAAMA,EAAM,QAAQ,MAAM,CAAC,CAIrC,OAASuC,EAAA,CACL,YAAM,KAAK,eAAevC,CAAK,EAIzB,IAAIb,EAAa,sBAAuB,CAC1C,KAAM,KAAK,KACf,CAAC,CACL,CAKR,CACA,MAAM,cAAe,CACjB,GAAI,SAAU,KAAK,cAAgB,CAAC,KAAK,mBACrC,GAAI,CACA,MAAM,KAAK,aAAa,KAAK,SAAS,GAAG,OAAAkC,GAAU,KAAI,YAAK,MAAO,CACvE,OAASmB,EAAK,CAId,CAER,CACA,kBAAmB,CACX,SAAU,KAAK,cAAgB,CAAC,KAAK,mBACrC,KAAK,iBAAiB,OAASC,GAAQ,CACnC,GAAIA,EAAM,MAAQ,GAAG,OAAApB,GAAU,KAAI,YAAK,OAAS,CAI7C,IAAMqB,EAAe,SAAU,CAC3B,KAAK,gBAAkB,GACvB,IAAIC,EACJ,GAAI,CACA,MAAM,KAAK,QAAQ,CACf,MAAO,IACX,CAAC,CACL,OAASC,EAAO,CACZ,GAAIA,aAAiB,MACjB,MAAAD,EAAYC,EACND,CAEd,QAAE,CACM,KAAK,0BAA4B,EAAEA,GAAa,CAACF,EAAM,aACvD,MAAM,KAAK,aAAa,EAE5B,KAAK,gBAAkB,GACvB,KAAK,yBAA2B,EACpC,CACJ,EACAA,EAAM,UAAUC,EAAa,CAAC,CAClC,CACJ,CAAC,EAKI,KAAK,QAAQ,CACd,MAAO,IACX,CAAC,CAET,CACA,WAAW,aAAc,CACrB,OAAOnB,EACX,CACJ,EAEMsB,EAAN,KAA2B,CAEvB,YAAYjB,EAAMkB,EAAQ,CAD1B/C,EAAA,eAEI,KAAK,OAAS,IAAI4B,EAAoBC,EAAMkB,CAAO,CACvD,CACA,MAAM,aAAa,CAAE,QAAA7B,CAAQ,EAAG,CAC5B,MAAM,KAAK,OAAO,YAAY,CAC1B,QAAAA,CACJ,CAAC,CACL,CACJ,EAEM8B,GAAyB,CAC3B,gBAAiB,MAAO,CAAE,SAAA/D,CAAS,IAC3BA,EAAS,SAAW,KAAOA,EAAS,SAAW,EACxCA,EAEJ,IAEf,EAEA,SAASgE,EAAUC,EAAO,CACtB,OAAO,OAAOA,GAAU,SAAW,IAAI,QAAQA,CAAK,EAAIA,CAC5D,CACA,IAAMC,EAAN,KAAsB,CAWlB,YAAYC,EAAUL,EAAQ,CAV9B/C,EAAA,cACAA,EAAA,gBACAA,EAAA,YACAA,EAAA,eACAA,EAAA,kBAAa,CAAC,GACdA,EAAA,kBACAA,EAAA,yBACAA,EAAA,gCACAA,EAAA,iBACAA,EAAA,wBAgBI,KAAK,MAAQ+C,EAAQ,MACrB,KAAK,QAAUA,EAAQ,QACnBA,EAAQ,MACR,KAAK,IAAMA,EAAQ,IACnB,KAAK,OAASA,EAAQ,QAE1B,KAAK,UAAYK,EACjB,KAAK,iBAAmB,IAAIC,EAC5B,KAAK,wBAA0B,CAAC,EAChC,KAAK,SAAW,CACZ,GAAGD,EAAS,OAChB,EACA,KAAK,gBAAkB,IAAI,IAC3B,QAAWE,KAAU,KAAK,SACtB,KAAK,gBAAgB,IAAIA,EAAQ,CAAC,CAAC,EAEvC,KAAK,MAAM,UAAU,KAAK,iBAAiB,OAAO,CACtD,CACA,MAAM,MAAMJ,EAAO,CACf,GAAM,CAAE,MAAAR,CAAM,EAAI,KACdxB,EAAU+B,EAAUC,CAAK,EACvBK,EAAkB,MAAM,KAAK,mBAAmB,EACtD,GAAIA,EACA,OAAOA,EAEX,IAAMC,EAAkB,KAAK,YAAY,cAAc,EAAItC,EAAQ,MAAM,EAAI,KAC7E,GAAI,CACA,QAAWuC,KAAM,KAAK,iBAAiB,kBAAkB,EACrDvC,EAAU,MAAMuC,EAAG,CACf,QAASvC,EAAQ,MAAM,EACvB,MAAAwB,CACJ,CAAC,CAET,OAASD,EAAK,CACV,GAAIA,aAAe,MACf,MAAM,IAAIrD,EAAa,kCAAmC,CACtD,mBAAoBqD,EAAI,OAC5B,CAAC,CAET,CACA,IAAMiB,EAAwBxC,EAAQ,MAAM,EAC5C,GAAI,CACA,IAAIyC,EACJA,EAAgB,MAAM,MAAMzC,EAASA,EAAQ,OAAS,WAAa,OAAY,KAAK,UAAU,YAAY,EAI1G,QAAW0C,KAAY,KAAK,iBAAiB,iBAAiB,EAC1DD,EAAgB,MAAMC,EAAS,CAC3B,MAAAlB,EACA,QAASgB,EACT,SAAUC,CACd,CAAC,EAEL,OAAOA,CACX,OAASd,EAAO,CAIZ,MAAIW,GACA,MAAM,KAAK,aAAa,eAAgB,CACpC,MAAOX,EACP,MAAAH,EACA,gBAAiBc,EAAgB,MAAM,EACvC,QAASE,EAAsB,MAAM,CACzC,CAAC,EAECb,CACV,CACJ,CACA,MAAM,iBAAiBK,EAAO,CAC1B,IAAMjE,EAAW,MAAM,KAAK,MAAMiE,CAAK,EACjCW,EAAgB5E,EAAS,MAAM,EACrC,OAAK,KAAK,UAAU,KAAK,SAASiE,EAAOW,CAAa,CAAC,EAChD5E,CACX,CACA,MAAM,WAAWmC,EAAK,CAClB,IAAMF,EAAU+B,EAAU7B,CAAG,EACzB0C,EACE,CAAE,UAAAC,EAAW,aAAAC,CAAa,EAAI,KAAK,UACnCC,EAAmB,MAAM,KAAK,YAAY/C,EAAS,MAAM,EACzDgD,EAAoBC,EAAAC,EAAA,GACnBJ,GADmB,CAGlB,UAAAD,CAER,GACAD,EAAiB,MAAM,OAAO,MAAMG,EAAkBC,CAAiB,EAQvE,QAAWN,KAAY,KAAK,iBAAiB,0BAA0B,EACnEE,EAAiB,MAAMF,EAAS,CAC5B,UAAAG,EACA,aAAAC,EACA,eAAAF,EACA,QAASG,EACT,MAAO,KAAK,KAChB,CAAC,GAAK,OAEV,OAAOH,CACX,CACA,MAAM,SAAS1C,EAAKnC,EAAU,CAC1B,IAAMiC,EAAU+B,EAAU7B,CAAG,EAC7B,MAAMiD,EAAQ,CAAC,EACf,IAAMJ,EAAmB,MAAM,KAAK,YAAY/C,EAAS,OAAO,EAShE,GAAI,CAACjC,EAID,MAAM,IAAIG,EAAa,6BAA8B,CACjD,IAAKkF,GAAeL,EAAiB,GAAG,CAC5C,CAAC,EAEL,IAAMM,EAAkB,MAAM,KAAK,2BAA2BtF,CAAQ,EACtE,GAAI,CAACsF,EAID,MAAO,GAEX,GAAM,CAAE,UAAAR,EAAW,aAAAC,CAAa,EAAI,KAAK,UACnCQ,EAAQ,MAAM,KAAK,OAAO,KAAKT,CAAS,EAOxCU,EAAyB,KAAK,YAAY,gBAAgB,EAC1DC,EAAcD,EAAyB,MAAME,GAAuBH,EAAOP,EAAiB,MAAM,EAAG,CACvG,iBACJ,EAAGD,CAAY,EAAI,KAInB,GAAI,CACA,MAAMQ,EAAM,IAAIP,EAAkBQ,EAAyBF,EAAgB,MAAM,EAAIA,CAAe,CACxG,OAAS1B,EAAO,CACZ,GAAIA,aAAiB,MACjB,MAAIA,EAAM,OAAS,sBACf,MAAM+B,GAA2B,EAE/B/B,CAEd,CACA,QAAWe,KAAY,KAAK,iBAAiB,gBAAgB,EACzD,MAAMA,EAAS,CACX,UAAAG,EACA,YAAAW,EACA,YAAaH,EAAgB,MAAM,EACnC,QAASN,EACT,MAAO,KAAK,KAChB,CAAC,EAEL,MAAO,EACX,CACA,MAAM,YAAY/C,EAAS2D,EAAM,CAC7B,IAAMzD,EAAM,GAAG,OAAAF,EAAQ,IAAG,OAAM,OAAA2D,GAChC,GAAI,CAAC,KAAK,WAAWzD,CAAG,EAAG,CACvB,IAAI6C,EAAmB/C,EACvB,QAAW0C,KAAY,KAAK,iBAAiB,oBAAoB,EAC7DK,EAAmBhB,EAAU,MAAMW,EAAS,CACxC,KAAAiB,EACA,QAASZ,EACT,MAAO,KAAK,MACZ,OAAQ,KAAK,MACjB,CAAC,CAAC,EAEN,KAAK,WAAW7C,CAAG,EAAI6C,CAC3B,CACA,OAAO,KAAK,WAAW7C,CAAG,CAC9B,CACA,YAAYS,EAAM,CACd,QAAWyB,KAAU,KAAK,UAAU,QAChC,GAAIzB,KAAQyB,EACR,MAAO,GAGf,MAAO,EACX,CACA,MAAM,aAAazB,EAAMiD,EAAO,CAC5B,QAAWlB,KAAY,KAAK,iBAAiB/B,CAAI,EAC7C,MAAM+B,EAASkB,CAAK,CAE5B,CACA,CAAC,iBAAiBjD,EAAM,CACpB,QAAWyB,KAAU,KAAK,UAAU,QAChC,GAAI,OAAOA,EAAOzB,CAAI,GAAM,WAAY,CACpC,IAAMkD,EAAQ,KAAK,gBAAgB,IAAIzB,CAAM,EAQ7C,MAP0BwB,GAAQ,CAC9B,IAAME,EAAgBb,EAAAC,EAAA,GACfU,GADe,CAElB,MAAAC,CACJ,GACA,OAAOzB,EAAOzB,CAAI,EAAEmD,CAAa,CACrC,CAEJ,CAER,CACA,UAAUC,EAAS,CACf,YAAK,wBAAwB,KAAKA,CAAO,EAClCA,CACX,CACA,MAAM,aAAc,CAChB,IAAIA,EACJ,KAAMA,EAAU,KAAK,wBAAwB,MAAM,GAC/C,MAAMA,CAEd,CACA,SAAU,CACN,KAAK,iBAAiB,QAAQ,IAAI,CACtC,CACA,MAAM,oBAAqB,CACvB,GAAI,KAAK,iBAAiB,YAAc,KAAK,MAAM,QAAQ,OAAS,YAAc,oBAAqB,KAAK,MACxG,GAAI,CACA,IAAMC,EAA0B,MAAM,KAAK,MAAM,gBACjD,GAAIA,EAIA,OAAOA,CAEf,OAASrC,EAAO,CAIZ,MACJ,CAGR,CACA,MAAM,2BAA2B5D,EAAU,CACvC,IAAIsF,EAAkBtF,EAClBkG,EAAc,GAClB,QAAWvB,KAAY,KAAK,iBAAiB,iBAAiB,EAO1D,GANAW,EAAkB,MAAMX,EAAS,CAC7B,QAAS,KAAK,QACd,SAAUW,EACV,MAAO,KAAK,KAChB,CAAC,GAAK,OACNY,EAAc,GACV,CAACZ,EACD,MAGR,OAAKY,GACGZ,GAAmBA,EAAgB,SAAW,MAQ9CA,EAAkB,QAGnBA,CACX,CACJ,EAEMa,EAAN,KAAe,CAKX,YAAYrC,EAAU,CAAC,EAAE,CAJzB/C,EAAA,kBACAA,EAAA,gBACAA,EAAA,qBACAA,EAAA,qBAEI,KAAK,UAAYqF,EAAW,eAAetC,EAAQ,SAAS,EAC5D,KAAK,QAAUA,EAAQ,SAAW,CAAC,EACnC,KAAK,aAAeA,EAAQ,aAC5B,KAAK,aAAeA,EAAQ,YAChC,CACA,OAAOA,EAAS,CACZ,GAAM,CAACuC,CAAY,EAAI,KAAK,UAAUvC,CAAO,EAC7C,OAAOuC,CACX,CACA,UAAUvC,EAAS,CACXA,aAAmB,aACnBA,EAAU,CACN,MAAOA,EACP,QAASA,EAAQ,OACrB,GAEJ,IAAML,EAAQK,EAAQ,MAChB7B,EAAU,OAAO6B,EAAQ,SAAY,SAAW,IAAI,QAAQA,EAAQ,OAAO,EAAIA,EAAQ,QACvFwC,EAAU,IAAIpC,EAAgB,KAAMJ,EAAQ,IAAM,CACpD,MAAAL,EACA,QAAAxB,EACA,IAAK6B,EAAQ,IACb,OAAQA,EAAQ,MACpB,EAAI,CACA,MAAAL,EACA,QAAAxB,CACJ,CAAC,EACKoE,EAAe,KAAK,aAAaC,EAASrE,EAASwB,CAAK,EACxD8C,EAAc,KAAK,eAAeF,EAAcC,EAASrE,EAASwB,CAAK,EAC7E,MAAO,CACH4C,EACAE,CACJ,CACJ,CACA,MAAM,aAAaD,EAASrE,EAASwB,EAAO,CACxC,MAAM6C,EAAQ,aAAa,mBAAoB,CAC3C,MAAA7C,EACA,QAAAxB,CACJ,CAAC,EACD,IAAIjC,EACJ,GAAI,CAEA,GADAA,EAAW,MAAM,KAAK,QAAQiC,EAASqE,CAAO,EAC1CtG,IAAa,QAAaA,EAAS,OAAS,QAC5C,MAAM,IAAIG,EAAa,cAAe,CAClC,IAAK8B,EAAQ,GACjB,CAAC,CAET,OAAS2B,EAAO,CACZ,GAAIA,aAAiB,OACjB,QAAWe,KAAY2B,EAAQ,iBAAiB,iBAAiB,EAM7D,GALAtG,EAAW,MAAM2E,EAAS,CACtB,MAAAf,EACA,MAAAH,EACA,QAAAxB,CACJ,CAAC,EACGjC,IAAa,OACb,MAIZ,GAAI,CAACA,EACD,MAAM4D,CAKd,CACA,QAAWe,KAAY2B,EAAQ,iBAAiB,oBAAoB,EAChEtG,EAAW,MAAM2E,EAAS,CACtB,MAAAlB,EACA,QAAAxB,EACA,SAAAjC,CACJ,CAAC,EAEL,OAAOA,CACX,CACA,MAAM,eAAeqG,EAAcC,EAASrE,EAASwB,EAAO,CACxD,IAAIzD,EACA4D,EACJ,GAAI,CACA5D,EAAW,MAAMqG,CACrB,OAAS9C,EAAA,CAAC,CACV,GAAI,CACA,MAAM+C,EAAQ,aAAa,oBAAqB,CAC5C,MAAA7C,EACA,QAAAxB,EACA,SAAAjC,CACJ,CAAC,EACD,MAAMsG,EAAQ,YAAY,CAC9B,OAASE,EAAgB,CACjBA,aAA0B,QAC1B5C,EAAQ4C,EAEhB,CAQA,GAPA,MAAMF,EAAQ,aAAa,qBAAsB,CAC7C,MAAA7C,EACA,QAAAxB,EACA,SAAAjC,EACA,MAAA4D,CACJ,CAAC,EACD0C,EAAQ,QAAQ,EACZ1C,EACA,MAAMA,CAEd,CACJ,EAaA,IAAM6C,EAAN,cAA2BC,CAAS,CAEhC,YAAYC,EAAU,CAAC,EAAE,CACrB,MAAMA,CAAO,EAFjBC,EAAA,+BAGS,KAAK,QAAQ,KAAMC,GAAI,oBAAqBA,CAAC,GAC9C,KAAK,QAAQ,QAAQC,EAAsB,EAE/C,KAAK,uBAAyBH,EAAQ,uBAAyB,CAWnE,CACA,MAAM,QAAQI,EAASC,EAAS,CAC5B,IAAMC,EAAO,CAAC,EASRC,EAAW,CAAC,EACdC,EACJ,GAAI,KAAK,uBAAwB,CAC7B,GAAM,CAAE,GAAAC,EAAI,QAAAC,CAAQ,EAAI,KAAK,mBAAmB,CAC5C,QAAAN,EACA,KAAAE,EACA,QAAAD,CACJ,CAAC,EACDG,EAAYC,EACZF,EAAS,KAAKG,CAAO,CACzB,CACA,IAAMC,EAAiB,KAAK,mBAAmB,CAC3C,UAAAH,EACA,QAAAJ,EACA,KAAAE,EACA,QAAAD,CACJ,CAAC,EACDE,EAAS,KAAKI,CAAc,EAC5B,IAAMC,EAAW,MAAMP,EAAQ,WAAW,SAC/B,MAAMA,EAAQ,UAAU,QAAQ,KAAKE,CAAQ,CAAC,GAAK,MAAMI,GACjE,CAAC,EASJ,GAAI,CAACC,EACD,MAAM,IAAIC,EAAa,cAAe,CAClC,IAAKT,EAAQ,GACjB,CAAC,EAEL,OAAOQ,CACX,CACA,mBAAmB,CAAE,QAAAR,EAAS,KAAAE,EAAM,QAAAD,CAAQ,EAAG,CAC3C,IAAIG,EAUJ,MAAO,CACH,QAVmB,IAAI,QAASM,GAAU,CAO1CN,EAAY,WANa,SAAU,CAI/BM,EAAQ,MAAMT,EAAQ,WAAWD,CAAO,CAAC,CAC7C,EACyC,KAAK,uBAAyB,GAAI,CAC/E,CAAC,EAGG,GAAII,CACR,CACJ,CACA,MAAM,mBAAmB,CAAE,UAAAA,EAAW,QAAAJ,EAAS,KAAAE,EAAM,QAAAD,CAAQ,EAAG,CAC5D,IAAIU,EACAH,EACJ,GAAI,CACAA,EAAW,MAAMP,EAAQ,iBAAiBD,CAAO,CACrD,OAASY,EAAY,CACbA,aAAsB,QACtBD,EAAQC,EAEhB,CACA,OAAIR,GACA,aAAaA,CAAS,GAStBO,GAAS,CAACH,KACVA,EAAW,MAAMP,EAAQ,WAAWD,CAAO,GASxCQ,CACX,CACJ,EAEMK,EAAN,cAA0BlB,CAAS,CAE/B,YAAYC,EAAU,CAAC,EAAE,CACrB,MAAMA,CAAO,EAFjBC,EAAA,+BAGI,KAAK,uBAAyBD,EAAQ,uBAAyB,CACnE,CACA,MAAM,QAAQI,EAASC,EAAS,CAS5B,IAAIU,EACAH,EACJ,GAAI,CACA,IAAML,EAAW,CACbF,EAAQ,MAAMD,CAAO,CACzB,EACA,GAAI,KAAK,uBAAwB,CAC7B,IAAMc,EAAiBC,EAAQ,KAAK,uBAAyB,GAAI,EACjEZ,EAAS,KAAKW,CAAc,CAChC,CAEA,GADAN,EAAW,MAAM,QAAQ,KAAKL,CAAQ,EAClC,CAACK,EACD,MAAM,IAAI,MAAM,wCAAwC,YAAK,uBAAsB,YAAW,CAEtG,OAASQ,EAAK,CACNA,aAAe,QACfL,EAAQK,EAEhB,CAWA,GAAI,CAACR,EACD,MAAM,IAAIC,EAAa,cAAe,CAClC,IAAKT,EAAQ,IACb,MAAAW,CACJ,CAAC,EAEL,OAAOH,CACX,CACJ,EAEMS,GAAgB,MAUtB,IAAMC,EAAoBC,GAClBA,GAAW,OAAOA,GAAY,SASvBA,EAUJ,CACH,OAAQA,CACZ,EAGEC,EAAN,KAAY,CAKR,YAAYC,EAAOF,EAASG,EAASC,GAAc,CAJnDC,EAAA,gBACAA,EAAA,cACAA,EAAA,eACAA,EAAA,qBAeI,KAAK,QAAUN,EAAiBC,CAAO,EACvC,KAAK,MAAQE,EACb,KAAK,OAASC,CAClB,CACA,gBAAgBH,EAAS,CACrB,KAAK,aAAeD,EAAiBC,CAAO,CAChD,CACJ,EAEMM,EAAN,MAAMA,UAAyBC,CAAS,CAepC,YAAYC,EAAU,CAAC,EAAE,CACrBA,EAAQ,UAAYC,EAAW,gBAAgBD,EAAQ,SAAS,EAChE,MAAMA,CAAO,EAhBjBH,EAAA,2BAiBI,KAAK,mBAAqBG,EAAQ,oBAAsB,GACxD,KAAK,QAAQ,KAAKF,EAAiB,sCAAsC,CAC7E,CACA,MAAM,QAAQI,EAASV,EAAS,CAC5B,IAAMW,EAAkB,MAAMX,EAAQ,mBAAmB,EACzD,GAAIW,EACA,OAAOA,EAEX,IAAMC,EAAW,MAAMZ,EAAQ,WAAWU,CAAO,EACjD,OAAIE,IAGAZ,EAAQ,OAASA,EAAQ,MAAM,OAAS,UACjC,MAAM,KAAK,eAAeU,EAASV,CAAO,EAE9C,MAAM,KAAK,aAAaU,EAASV,CAAO,EACnD,CACA,MAAM,aAAaU,EAASV,EAAS,CACjC,IAAIY,EACEC,EAASb,EAAQ,QAAU,CAAC,EAClC,GAAI,KAAK,mBAAoB,CAIzB,IAAMc,EAAsBD,EAAO,UAC7BE,EAAqBL,EAAQ,UAC7BM,EAAsB,CAACD,GAAsBA,IAAuBD,EAI1E,GAHAF,EAAW,MAAMZ,EAAQ,MAAM,IAAI,QAAQU,EAAS,CAChD,UAAWA,EAAQ,OAAS,UAAYK,GAAsBD,EAAsB,MACxF,CAAC,CAAC,EACEA,GAAuBE,GAAuBN,EAAQ,OAAS,UAAW,CAC1E,KAAK,sCAAsC,EAC3C,IAAMO,EAAY,MAAMjB,EAAQ,SAASU,EAASE,EAAS,MAAM,CAAC,CAMtE,CACJ,KACI,OAAM,IAAIM,EAAa,yBAA0B,CAC7C,UAAW,KAAK,UAChB,IAAKR,EAAQ,GACjB,CAAC,EAcL,OAAOE,CACX,CACA,MAAM,eAAeF,EAASV,EAAS,CACnC,KAAK,sCAAsC,EAC3C,IAAMY,EAAW,MAAMZ,EAAQ,MAAMU,CAAO,EAE5C,GAAI,CADc,MAAMV,EAAQ,SAASU,EAASE,EAAS,MAAM,CAAC,EAE9D,MAAM,IAAIM,EAAa,0BAA2B,CAC9C,IAAKR,EAAQ,IACb,OAAQE,EAAS,MACrB,CAAC,EAEL,OAAOA,CACX,CACA,uCAAwC,CACpC,IAAIO,EAAqB,KACrBC,EAA6B,EACjC,OAAW,CAACC,EAAOC,CAAM,IAAK,KAAK,QAAQ,QAAQ,EAC3CA,IAAWhB,EAAiB,yCAG5BgB,IAAWhB,EAAiB,oCAC5Ba,EAAqBE,GAErBC,EAAO,iBACPF,KAGJA,IAA+B,EAC/B,KAAK,QAAQ,KAAKd,EAAiB,iCAAiC,EAC7Dc,EAA6B,GAAKD,IAAuB,MAChE,KAAK,QAAQ,OAAOA,EAAoB,CAAC,CAEjD,CACJ,EA3GId,EAFEC,EAEK,oCAAoC,CACvC,MAAM,gBAAiB,CAAE,SAAAM,CAAS,EAAG,CACjC,MAAI,CAACA,GAAYA,EAAS,QAAU,IACzB,KAEJA,CACX,CACJ,GACAP,EAVEC,EAUK,yCAAyC,CAC5C,MAAM,gBAAiB,CAAE,SAAAM,CAAS,EAAG,CACjC,OAAOA,EAAS,WAAa,MAAMW,GAAaX,CAAQ,EAAIA,CAChE,CACJ,GAdJ,IAAMY,EAANlB,EA+GMmB,EAAN,cAA8BxB,CAAM,CAGhC,YAAYD,EAAS,CAAE,UAAA0B,EAAY,CAC/B,GACJ,EAAG,SAAAC,EAAW,CAAC,CAAE,EAAI,CAAC,EAAE,CAepB,MAAOnB,GAAU,KAAK,OAAOA,CAAO,EAAGR,CAAO,EAnBlDK,EAAA,mBACAA,EAAA,kBAmBI,KAAK,WAAaqB,EAClB,KAAK,UAAYC,CACrB,CACA,OAAO,CAAE,IAAAC,EAAK,QAAAlB,CAAQ,EAAG,CACrB,GAAIA,GAAWA,EAAQ,OAAS,WAC5B,MAAO,GAEX,IAAMmB,EAAoBD,EAAI,SAAWA,EAAI,OAC7C,QAAWE,KAAU,KAAK,UACtB,GAAIA,EAAO,KAAKD,CAAiB,EAI7B,MAAO,GAGf,MAAI,OAAK,WAAW,KAAMC,GAASA,EAAO,KAAKD,CAAiB,CAAC,CAUrE,CACJ,EAEME,GAA+B,IAAI,CAhxCzC,IAAAC,EAixCI,MAAO,IAAQA,EAAA,KAAK,eAAL,MAAAA,EAAmB,kBACtC,EACMC,GAA2BC,GAAc,CACvCH,GAA6B,GAC7B,KAAK,iBAAiB,WAAaI,GAAQ,CACvCA,EAAM,UAAU,KAAK,aAAa,kBAAkB,OAAO,EAAE,KAAK,IAAI,CAC9DD,GACK,KAAK,aAAa,kBAAkB,eAAeA,CAAW,CAK3E,CAAC,CAAC,CACN,CAAC,CAMT,EAiBA,IAAME,GAA4B,CAACC,EAAWC,EAA8B,CAAC,IAAI,CAC7E,QAAWC,IAAa,CACpB,GAAGF,EAAU,aAAa,KAAK,CACnC,EACQC,EAA4B,KAAME,GAASA,EAAO,KAAKD,CAAS,CAAC,GACjEF,EAAU,aAAa,OAAOE,CAAS,EAG/C,OAAOF,CACX,EAEA,SAAUI,GAAsBC,EAAK,CAAE,eAAAC,EAAiB,aAAc,4BAAAL,EAA8B,CAChG,QACA,UACJ,EAAG,UAAAM,EAAY,GAAM,gBAAAC,CAAgB,EAAI,CAAC,EAAG,CACzC,IAAMR,EAAY,IAAI,IAAIK,EAAK,SAAS,IAAI,EAC5CL,EAAU,KAAO,GACjB,MAAMA,EAAU,KAChB,IAAMS,EAA0BV,GAA0BC,EAAWC,CAA2B,EAEhG,GADA,MAAMQ,EAAwB,KAC1BH,GAAkBG,EAAwB,SAAS,SAAS,GAAG,EAAG,CAClE,IAAMC,EAAe,IAAI,IAAID,EAAwB,IAAI,EACzDC,EAAa,UAAYJ,EACzB,MAAMI,EAAa,IACvB,CACA,GAAIH,EAAW,CACX,IAAMI,EAAW,IAAI,IAAIF,EAAwB,IAAI,EACrDE,EAAS,UAAY,QACrB,MAAMA,EAAS,IACnB,CACA,GAAIH,EAAiB,CACjB,IAAMI,EAAiBJ,EAAgB,CACnC,IAAKR,CACT,CAAC,EACD,QAAWa,KAAgBD,EACvB,MAAMC,EAAa,IAE3B,CACJ,CAEA,IAAMC,EAAN,cAA0BC,CAAM,CAC5B,YAAYZ,EAAQa,EAASC,EAAO,CAShC,IAAMC,EAAQ,CAAC,CAAE,IAAAb,CAAI,IAAI,CACrB,IAAMc,EAAShB,EAAO,KAAKE,EAAI,IAAI,EACnC,GAAKc,GAGD,EAAAd,EAAI,SAAW,SAAS,QAAUc,EAAO,QAAU,GAMvD,OAAOA,EAAO,MAAM,CAAC,CACzB,EACA,MAAMD,EAAOF,EAASC,CAAM,CAChC,CACJ,EAEMG,GAAuBC,GAAU,CA4BnCC,EAAW,cAAcD,CAAO,CACpC,EAEME,GAAwB,kBACxBC,GAAkBC,GAAQ,CAC5B,GAAI,CAACA,EACD,MAAM,IAAIC,EAAa,oCAAqC,CACxD,MAAAD,CACJ,CAAC,EAEL,GAAI,OAAOA,GAAU,SAAU,CAC3B,IAAMzB,EAAY,IAAI,IAAIyB,EAAO,SAAS,IAAI,EAC9C,MAAO,CACH,SAAUzB,EAAU,KACpB,IAAKA,EAAU,IACnB,CACJ,CACA,GAAM,CAAE,SAAA2B,EAAU,IAAAtB,CAAI,EAAIoB,EAC1B,GAAI,CAACpB,EACD,MAAM,IAAIqB,EAAa,oCAAqC,CACxD,MAAAD,CACJ,CAAC,EAEL,GAAI,CAACE,EAAU,CACX,IAAM3B,EAAY,IAAI,IAAIK,EAAK,SAAS,IAAI,EAC5C,MAAO,CACH,SAAUL,EAAU,KACpB,IAAKA,EAAU,IACnB,CACJ,CACA,IAAM4B,EAAc,IAAI,IAAIvB,EAAK,SAAS,IAAI,EACxCwB,EAAc,IAAI,IAAIxB,EAAK,SAAS,IAAI,EAC9C,OAAAuB,EAAY,aAAa,IAAIL,GAAuBI,CAAQ,EACrD,CACH,SAAUC,EAAY,KACtB,IAAKC,EAAY,IACrB,CACJ,EAEMC,EAAN,KAAkC,CAAlC,cACIC,EAAA,mBAAc,CAAC,GACfA,EAAA,sBAAiB,CAAC,GAClBA,EAAA,wBAAmB,MAAO,CAAE,QAAAC,EAAS,MAAAC,CAAM,IAAI,CACvCA,IACAA,EAAM,gBAAkBD,EAEhC,GACAD,EAAA,gCAA2B,MAAO,CAAE,MAAAG,EAAO,MAAAD,EAAO,eAAAE,CAAe,IAAI,CACjE,GAAID,EAAM,OAAS,WACXD,GAAA,MAAAA,EAAO,iBAAmBA,EAAM,2BAA2B,QAAS,CACpE,IAAM5B,EAAM4B,EAAM,gBAAgB,IAC9BE,EACA,KAAK,eAAe,KAAK9B,CAAG,EAE5B,KAAK,YAAY,KAAKA,CAAG,CAEjC,CAEJ,OAAO8B,CACX,GACJ,EAEMC,GAAa,CAACC,EAASrB,EAASC,IAAS,CAC3C,GAAI,OAAOoB,GAAY,SAAU,CAC7B,IAAMC,EAAa,IAAI,IAAID,EAAS,SAAS,IAAI,EAe3CE,EAAgB,CAAC,CAAE,IAAAlC,CAAI,IAMlBA,EAAI,OAASiC,EAAW,KAEnC,OAAO,IAAIvB,EAAMwB,EAAevB,EAASC,CAAM,CACnD,CACA,GAAIoB,aAAmB,OACnB,OAAO,IAAIvB,EAAYuB,EAASrB,EAASC,CAAM,EAEnD,GAAI,OAAOoB,GAAY,WACnB,OAAO,IAAItB,EAAMsB,EAASrB,EAASC,CAAM,EAE7C,GAAIoB,aAAmBtB,EACnB,OAAOsB,EAEX,MAAM,IAAIX,EAAa,yBAA0B,CAC7C,WAAY,UACZ,SAAU,aACV,UAAW,SACf,CAAC,CACL,ECz/CA,IAAMc,GAAW,MAAOC,EAAOC,EAAOC,IAAO,CACzC,IAAMC,EAAOF,EAAM,IAAI,CAACG,EAAMC,KAAS,CAC/B,MAAAA,EACA,KAAAD,CACJ,EAAE,EACAE,EAAY,MAAOC,GAAM,CAC3B,IAAMC,EAAU,CAAC,EACjB,OAAW,CACP,IAAMC,EAAON,EAAK,IAAI,EACtB,GAAI,CAACM,EACD,OAAOF,EAAIC,CAAO,EAEtB,IAAME,EAAS,MAAMR,EAAKO,EAAK,IAAI,EACnCD,EAAQ,KAAK,CACT,OAAQE,EACR,MAAOD,EAAK,KAChB,CAAC,CACL,CACJ,EACME,EAAS,MAAM,KAAK,CACtB,OAAQX,CACZ,EAAG,IAAI,IAAI,QAAQM,CAAS,CAAC,EAE7B,OADiB,MAAM,QAAQ,IAAIK,CAAM,GAAG,KAAK,EAAE,KAAK,CAACC,EAAGC,IAAID,EAAE,MAAQC,EAAE,MAAQ,GAAK,CAAC,EAAE,IAAKN,GAAMA,EAAI,MAAM,CAErH,EC+BA,IAAMO,GAAW,OAAO,UAAc,KAAe,iCAAiC,KAAK,UAAU,SAAS,EAoL9G,IAAMC,GAAU,qBACVC,EAAqB,gBACrBC,GAAgBC,GAAkB,CACpC,IAAMC,EAAM,IAAI,IAAID,EAAiB,SAAS,IAAI,EAClD,OAAAC,EAAI,KAAO,GACJA,EAAI,IACf,EACMC,GAAN,KAA2B,CAGvB,YAAYC,EAAU,CAFtBC,EAAA,mBACAA,EAAA,WAAM,MAEF,KAAK,WAAaD,CACtB,CACA,OAAOF,EAAK,CACR,MAAO,GAAG,YAAK,WAAU,KAAI,OAAAF,GAAaE,CAAG,EACjD,CACA,WAAWI,EAAI,CACX,IAAMC,EAAWD,EAAG,kBAAkBP,EAAoB,CACtD,QAAS,IACb,CAAC,EACDQ,EAAS,YAAY,YAAa,YAAa,CAC3C,OAAQ,EACZ,CAAC,EACDA,EAAS,YAAY,YAAa,YAAa,CAC3C,OAAQ,EACZ,CAAC,CACL,CACA,0BAA0BD,EAAI,CAC1B,KAAK,WAAWA,CAAE,EACd,KAAK,YACAE,GAAS,KAAK,UAAU,CAErC,CACA,MAAM,aAAaN,EAAKO,EAAW,CAC/BP,EAAMF,GAAaE,CAAG,EACtB,IAAMQ,EAAQ,CACV,GAAI,KAAK,OAAOR,CAAG,EACnB,UAAW,KAAK,WAChB,IAAAA,EACA,UAAAO,CACJ,EAEME,GADK,MAAM,KAAK,MAAM,GACd,YAAYZ,EAAoB,YAAa,CACvD,WAAY,SAChB,CAAC,EACD,MAAMY,EAAG,MAAM,IAAID,CAAK,EACxB,MAAMC,EAAG,IACb,CACA,MAAM,aAAaT,EAAK,CAEpB,IAAMQ,EAAQ,MADH,MAAM,KAAK,MAAM,GACL,IAAIX,EAAoB,KAAK,OAAOG,CAAG,CAAC,EAC/D,OAAOQ,GAAA,YAAAA,EAAO,SAClB,CACA,MAAM,cAAcE,EAAcC,EAAU,CAExC,IAAIC,EAAS,MADF,MAAM,KAAK,MAAM,GACN,YAAYf,EAAoB,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,WAAW,KAAM,MAAM,EAC7GgB,EAAc,CAAC,EACjBC,EAAyB,EAC7B,KAAMF,GAAO,CACT,IAAMG,EAASH,EAAO,MAClBG,EAAO,YAAc,KAAK,aACtBL,GAAgBK,EAAO,UAAYL,GAAgBC,GAAYG,GAA0BH,GACzFC,EAAO,OAAO,EACdC,EAAY,KAAKE,EAAO,GAAG,GAE3BD,KAGRF,EAAS,MAAMA,EAAO,SAAS,CACnC,CACA,OAAOC,CACX,CACA,MAAM,OAAQ,CACV,OAAK,KAAK,MACN,KAAK,IAAM,MAAMG,EAAOpB,GAAS,EAAG,CAChC,QAAS,KAAK,0BAA0B,KAAK,IAAI,CACrD,CAAC,GAEE,KAAK,GAChB,CACJ,EAEMqB,GAAN,KAAsB,CAQlB,YAAYf,EAAWgB,EAAS,CAAC,EAAE,CAPnCf,EAAA,kBAAa,IACbA,EAAA,uBAAkB,IAClBA,EAAA,oBACAA,EAAA,uBACAA,EAAA,sBACAA,EAAA,mBACAA,EAAA,wBAiCI,KAAK,YAAce,EAAO,WAC1B,KAAK,eAAiBA,EAAO,cAC7B,KAAK,cAAgBA,EAAO,aAC5B,KAAK,WAAahB,EAClB,KAAK,gBAAkB,IAAID,GAAqBC,CAAS,CAC7D,CACA,MAAM,eAAgB,CAClB,GAAI,KAAK,WAAY,CACjB,KAAK,gBAAkB,GACvB,MACJ,CACA,KAAK,WAAa,GAClB,IAAMQ,EAAe,KAAK,eAAiB,KAAK,IAAI,EAAI,KAAK,eAAiB,IAAO,EAC/ES,EAAc,MAAM,KAAK,gBAAgB,cAAcT,EAAc,KAAK,WAAW,EACrFU,EAAQ,MAAM,KAAK,OAAO,KAAK,KAAK,UAAU,EACpD,QAAWpB,KAAOmB,EACd,MAAMC,EAAM,OAAOpB,EAAK,KAAK,aAAa,EAc9C,KAAK,WAAa,GACd,KAAK,kBACL,KAAK,gBAAkB,GAClB,KAAK,cAAc,EAEhC,CACA,MAAM,gBAAgBA,EAAK,CASvB,MAAM,KAAK,gBAAgB,aAAaA,EAAK,KAAK,IAAI,CAAC,CAC3D,CACA,MAAM,aAAaA,EAAK,CACpB,GAAI,CAAC,KAAK,eAON,MAAO,GAEX,IAAMO,EAAY,MAAM,KAAK,gBAAgB,aAAaP,CAAG,EACvDqB,EAAkB,KAAK,IAAI,EAAI,KAAK,eAAiB,IAC3D,OAAOd,IAAc,OAAYA,EAAYc,EAAkB,EACnE,CACA,MAAM,QAAS,CACX,KAAK,gBAAkB,GACvB,MAAM,KAAK,gBAAgB,cAAc,OAAO,iBAAiB,CACrE,CACJ,EAEMC,GAA8BC,GAAW,CAQ3CC,GAAoB,IAAID,CAAQ,CAIpC,EAEME,EAAN,KAAuB,CAGnB,YAAYP,EAAS,CAAC,EAAE,CAFxBf,EAAA,gBACAA,EAAA,0BAmCI,KAAK,QAAUe,EACf,KAAK,kBAAoB,IAAI,IACxB,KAAK,QAAQ,aACd,KAAK,QAAQ,WAAa,gBAE1B,KAAK,QAAQ,mBACbI,GAA2B,IAAI,KAAK,uBAAuB,CAAC,CAEpE,CACA,oBAAoBpB,EAAW,CAC3B,GAAIA,IAAcwB,EAAa,eAAe,EAC1C,MAAM,IAAIC,EAAa,2BAA2B,EAEtD,IAAIC,EAAkB,KAAK,kBAAkB,IAAI1B,CAAS,EAC1D,OAAK0B,IACDA,EAAkB,IAAIX,GAAgBf,EAAW,KAAK,OAAO,EAC7D,KAAK,kBAAkB,IAAIA,EAAW0B,CAAe,GAElDA,CACX,CACA,yBAAyB,CAAE,MAAAC,EAAO,UAAA3B,EAAW,QAAA4B,EAAS,eAAAC,CAAe,EAAG,CACpE,GAAI,CAACA,EACD,OAAO,KAEX,IAAMC,EAAU,KAAK,qBAAqBD,CAAc,EAClDH,EAAkB,KAAK,oBAAoB1B,CAAS,EACpD+B,EAAuB,KAAK,QAAQ,aAAe,YACnDC,GAAQ,SAAU,CAChBD,GACA,MAAML,EAAgB,gBAAgBE,EAAQ,GAAG,EAErD,MAAMF,EAAgB,cAAc,CACxC,GAAG,EACH,GAAI,CACAC,EAAM,UAAUK,CAAI,CACxB,OAASC,EAAA,CAMT,CACA,OAAOH,EAAUD,EAAiB,IACtC,CACA,qBAAqBA,EAAgB,CAEjC,GAD6B,KAAK,QAAQ,aAAe,YAErD,MAAO,GAEX,IAAMK,EAAM,KAAK,IAAI,EACrB,GAAI,CAAC,KAAK,QAAQ,cACd,MAAO,GAEX,IAAMC,EAAsB,KAAK,wBAAwBN,CAAc,EACvE,OAAIM,IAAwB,KACjB,GAEJA,GAAuBD,EAAM,KAAK,QAAQ,cAAgB,GACrE,CACA,wBAAwBL,EAAgB,CACpC,GAAI,CAACA,EAAe,QAAQ,IAAI,MAAM,EAClC,OAAO,KAEX,IAAMO,EAAaP,EAAe,QAAQ,IAAI,MAAM,EAE9CQ,EADa,IAAI,KAAKD,CAAU,EACR,QAAQ,EACtC,OAAI,OAAO,MAAMC,CAAU,EAChB,KAEJA,CACX,CACA,MAAM,eAAe,CAAE,UAAArC,EAAW,QAAA4B,CAAQ,EAAG,CAezC,IAAMF,EAAkB,KAAK,oBAAoB1B,CAAS,EAC1D,MAAM0B,EAAgB,gBAAgBE,EAAQ,GAAG,EACjD,MAAMF,EAAgB,cAAc,CACxC,CACA,MAAM,wBAAyB,CAC3B,OAAW,CAAC1B,EAAW0B,CAAe,IAAK,KAAK,kBAC5C,MAAM,KAAK,OAAO,OAAO1B,CAAS,EAClC,MAAM0B,EAAgB,OAAO,EAEjC,KAAK,kBAAoB,IAAI,GACjC,CACJ,EAEMY,GAAa,2BACbC,GAAqB,KACrBC,GAAwB,2BACxBC,GAAW,2BACXC,GAAoB,gBACpBC,GAAe,WACfC,GAAc,UACdC,GAAsB,qBAEtBC,GAAwB9B,GACnB,MAAO,CAAE,MAAA+B,CAAM,IAAI,CACtB,IAAIzC,EACJ,KAAMA,EAAQ,MAAMyC,EAAM,aAAa,GAAE,CACrC,GAAM,CAAE,QAAAnB,EAAS,UAAAvB,CAAU,EAAIC,EACzBR,EAAM,IAAI,IAAI8B,EAAQ,GAAG,EAC/B,GAAI,CACA,IAAMoB,EAASpB,EAAQ,SAAW,OAAS,IAAI,gBAAgB,MAAMA,EAAQ,MAAM,EAAE,KAAK,CAAC,EAAI9B,EAAI,aAC7FmD,EAAkB5C,GAAa,OAAO2C,EAAO,IAAI,IAAI,CAAC,GAAK,GAC3DE,EAAY,KAAK,IAAI,EAAID,EAE/B,GADAD,EAAO,IAAI,KAAM,OAAOE,CAAS,CAAC,EAC9BlC,EAAO,mBACP,QAAWmC,KAAS,OAAO,KAAKnC,EAAO,kBAAkB,EAAE,CACvD,IAAMoC,EAAQpC,EAAO,mBAAmBmC,CAAK,EAC7CH,EAAO,IAAIG,EAAOC,CAAK,CAC3B,CAEA,OAAOpC,EAAO,WAAc,YAC5BA,EAAO,UAAU,KAAK,KAAMgC,CAAM,EAEtC,MAAM,MAAM,IAAI,QAAQlD,EAAI,OAASA,EAAI,SAAU,CAC/C,KAAMkD,EAAO,SAAS,EACtB,OAAQ,OACR,KAAM,OACN,YAAa,OACb,QAAS,CACL,eAAgB,YACpB,CACJ,CAAC,CAAC,CAIN,OAASK,EAAK,CACV,YAAMN,EAAM,eAAezC,CAAK,EAI1B+C,CACV,CACJ,CAIJ,EAEEC,GAAuBC,GAAe,CACxC,IAAMC,EAAQ,CAAC,CAAE,IAAA1D,CAAI,IAAIA,EAAI,WAAa0C,IAAyBK,GAAoB,KAAK/C,EAAI,QAAQ,EAClG2D,EAAU,IAAIC,EAAY,CAC5B,QAAS,CACLH,CACJ,CACJ,CAAC,EACD,MAAO,CACH,IAAII,EAAMH,EAAOC,EAAS,KAAK,EAC/B,IAAIE,EAAMH,EAAOC,EAAS,MAAM,CACpC,CACJ,EACMG,GAA0B5D,GAAY,CACxC,IAAMwD,EAAQ,CAAC,CAAE,IAAA1D,CAAI,IAAIA,EAAI,WAAa0C,IAAyB1C,EAAI,WAAa4C,GAC9Ee,EAAU,IAAII,EAAa,CAC7B,UAAA7D,CACJ,CAAC,EACD,OAAO,IAAI2D,EAAMH,EAAOC,EAAS,KAAK,CAC1C,EACMK,GAAqB9D,GAAY,CACnC,IAAMwD,EAAQ,CAAC,CAAE,IAAA1D,CAAI,IAAIA,EAAI,WAAa2C,IAAY3C,EAAI,WAAa6C,GACjEc,EAAU,IAAII,EAAa,CAC7B,UAAA7D,CACJ,CAAC,EACD,OAAO,IAAI2D,EAAMH,EAAOC,EAAS,KAAK,CAC1C,EACMM,GAAoB/D,GAAY,CAClC,IAAMwD,EAAQ,CAAC,CAAE,IAAA1D,CAAI,IAAIA,EAAI,WAAa2C,IAAY3C,EAAI,WAAa8C,GACjEa,EAAU,IAAII,EAAa,CAC7B,UAAA7D,CACJ,CAAC,EACD,OAAO,IAAI2D,EAAMH,EAAOC,EAAS,KAAK,CAC1C,EACMO,GAA6BC,GAAqC,CAArC,IAAAC,EAAAD,EAAE,SAAAE,EAAS,UAAAnE,CAvpB9C,EAupBmCkE,EAAyBE,EAAAC,GAAzBH,EAAyB,CAAvB,UAAS,cAC1C,IAAMI,EAAoB9C,EAAa,uBAAuBxB,CAAS,EACjEuD,EAAe,IAAIgB,EAAqBjC,GAAY,CACtD,iBAAkBC,GAClB,OAAQO,GAAqBsB,CAAO,CACxC,CAAC,EACKI,EAAS,CACXT,GAAiBO,CAAiB,EAClCV,GAAuBU,CAAiB,EACxCR,GAAkBQ,CAAiB,EACnC,GAAGhB,GAAoBC,CAAY,CACvC,EACA,QAAWkB,KAASD,EAChBL,EAAQ,cAAcM,CAAK,CAEnC,EAEMC,GAAN,KAA6B,CAGzB,YAAY,CAAE,aAAAC,EAAc,QAAAR,CAAQ,EAAE,CAFtClE,EAAA,sBACAA,EAAA,iBAEI,KAAK,cAAgB0E,EACrB,KAAK,SAAWR,CACpB,CACA,MAAM,gBAAgBhB,EAAO,CACzB,QAAWyB,KAAY,KAAK,cACxB,GAAI,OAAOA,GAAa,SAAU,CAC9B,IAAMC,EAAmB,MAAM,KAAK,SAAS,cAAcD,CAAQ,EACnE,GAAIC,IAAqB,OACrB,OAAOA,CAEf,SAAWD,EAAS,QAAQzB,CAAK,EAAG,CAChC,IAAM0B,EAAmB,MAAM,KAAK,SAAS,cAAcD,EAAS,GAAG,EACvE,GAAIC,IAAqB,OACrB,OAAOA,CAEf,CAGR,CACJ,EAEMC,GAA+B,CAACC,EAAMC,EAAOC,IAAM,CAQrD,IAAMC,EAAWH,EAAK,KACtB,GAAIE,GAAOA,EAAMC,GAAYF,GAASA,EAAQ,EAC1C,MAAM,IAAIvD,EAAa,wBAAyB,CAC5C,KAAMyD,EACN,IAAAD,EACA,MAAAD,CACJ,CAAC,EAEL,IAAIG,EACAC,EACJ,OAAIJ,IAAU,QAAaC,IAAQ,QAC/BE,EAAiBH,EACjBI,EAAeH,EAAM,GACdD,IAAU,QAAaC,IAAQ,QACtCE,EAAiBH,EACjBI,EAAeF,GACRD,IAAQ,QAAaD,IAAU,SACtCG,EAAiBD,EAAWD,EAC5BG,EAAeF,GAEZ,CACH,MAAOC,EACP,IAAKC,CACT,CACJ,EAEMC,GAAoBC,GAAc,CAQpC,IAAMC,EAAwBD,EAAY,KAAK,EAAE,YAAY,EAC7D,GAAI,CAACC,EAAsB,WAAW,QAAQ,EAC1C,MAAM,IAAI9D,EAAa,qBAAsB,CACzC,sBAAA8D,CACJ,CAAC,EAEL,GAAIA,EAAsB,SAAS,GAAG,EAClC,MAAM,IAAI9D,EAAa,oBAAqB,CACxC,sBAAA8D,CACJ,CAAC,EAEL,IAAMC,EAAa,cAAc,KAAKD,CAAqB,EAC3D,GAAI,CAACC,GAAc,EAAEA,EAAW,CAAC,GAAKA,EAAW,CAAC,GAC9C,MAAM,IAAI/D,EAAa,uBAAwB,CAC3C,sBAAA8D,CACJ,CAAC,EAEL,MAAO,CACH,MAAOC,EAAW,CAAC,IAAM,GAAK,OAAY,OAAOA,EAAW,CAAC,CAAC,EAC9D,IAAKA,EAAW,CAAC,IAAM,GAAK,OAAY,OAAOA,EAAW,CAAC,CAAC,CAChE,CACJ,EAEMC,GAAwB,MAAO7D,EAAS8D,IAAmB,CAC7D,GAAI,CAaA,GAAIA,EAAiB,SAAW,IAC5B,OAAOA,EAEX,IAAMJ,EAAc1D,EAAQ,QAAQ,IAAI,OAAO,EAC/C,GAAI,CAAC0D,EACD,MAAM,IAAI7D,EAAa,iBAAiB,EAE5C,IAAMkE,EAAaN,GAAiBC,CAAW,EACzCM,EAAe,MAAMF,EAAiB,KAAK,EAC3CG,EAAsBf,GAA6Bc,EAAcD,EAAW,MAAOA,EAAW,GAAG,EACjGG,EAAaF,EAAa,MAAMC,EAAoB,MAAOA,EAAoB,GAAG,EAClFE,EAAiBD,EAAW,KAC5BE,EAAiB,IAAI,SAASF,EAAY,CAC5C,OAAQ,IACR,WAAY,kBACZ,QAASJ,EAAiB,OAC9B,CAAC,EACD,OAAAM,EAAe,QAAQ,IAAI,iBAAkB,OAAOD,CAAc,CAAC,EACnEC,EAAe,QAAQ,IAAI,gBAAiB,SAAS,OAAAH,EAAoB,MAAK,KAAI,OAAAA,EAAoB,IAAM,EAAC,KAAM,GAAG,OAAAD,EAAa,KAAM,EAClII,CACX,OAASC,EAAO,CASZ,OAAO,IAAI,SAAS,GAAI,CACpB,OAAQ,IACR,WAAY,uBAChB,CAAC,CACL,CACJ,EAEMC,EAAN,KAA0B,CAA1B,cACIjG,EAAA,gCAA2B,MAAO,CAAE,QAAA2B,EAAS,eAAAC,CAAe,IACpDA,GAAkBD,EAAQ,QAAQ,IAAI,OAAO,EACtC,MAAM6D,GAAsB7D,EAASC,CAAc,EAEvDA,GAEf,EAEMsE,EAAN,cAAyBC,CAAS,CAC9B,MAAM,QAAQxE,EAAS6B,EAAS,CAC5B,IAAM4C,EAAO,CAAC,EASVC,EAAW,MAAM7C,EAAQ,WAAW7B,CAAO,EAC3CqE,EACJ,GAAI,CAACK,EAID,GAAI,CACAA,EAAW,MAAM7C,EAAQ,iBAAiB7B,CAAO,CACrD,OAASyB,EAAK,CACNA,aAAe,QACf4C,EAAQ5C,EAEhB,CAqBJ,GAAI,CAACiD,EACD,MAAM,IAAI7E,EAAa,cAAe,CAClC,IAAKG,EAAQ,IACb,MAAAqE,CACJ,CAAC,EAEL,OAAOK,CACX,CACJ,EAgCA,IAAMC,EAAN,cAAmCC,CAAS,CACxC,YAAYC,EAAU,CAAC,EAAE,CACrB,MAAMA,CAAO,EACR,KAAK,QAAQ,KAAMC,GAAI,oBAAqBA,CAAC,GAC9C,KAAK,QAAQ,QAAQC,EAAsB,CAEnD,CACA,MAAM,QAAQC,EAASC,EAAS,CAC5B,IAAMC,EAAO,CAAC,EASRC,EAAuBF,EAAQ,iBAAiBD,CAAO,EAAE,MAAM,IAAI,CAAC,CAAC,EACtEC,EAAQ,UAAUE,CAAoB,EAC3C,IAAIC,EAAW,MAAMH,EAAQ,WAAWD,CAAO,EAC3CK,EACJ,GAAI,CAAAD,EAQA,GAAI,CACAA,EAAW,MAAMD,CACrB,OAASG,EAAK,CACNA,aAAe,QACfD,EAAQC,EAEhB,CAUJ,GAAI,CAACF,EACD,MAAM,IAAIG,EAAa,cAAe,CAClC,IAAKP,EAAQ,IACb,MAAAK,CACJ,CAAC,EAEL,OAAOD,CACX,CACJ,EAEMI,GAAN,cAA4BC,CAAM,CAC9B,YAAYC,EAASb,EAAQ,CACzB,IAAMc,EAAQ,CAAC,CAAE,QAAAX,CAAQ,IAAI,CACzB,IAAMY,EAAkBF,EAAQ,sBAAsB,EACtD,QAAWG,KAAeC,GAAsBd,EAAQ,IAAKH,CAAO,EAAE,CAClE,IAAMkB,EAAWH,EAAgB,IAAIC,CAAW,EAChD,GAAIE,EAAU,CACV,IAAMC,EAAYN,EAAQ,2BAA2BK,CAAQ,EAC7D,MAAO,CACH,SAAAA,EACA,UAAAC,CACJ,CACJ,CACJ,CAKJ,EACA,MAAML,EAAOD,EAAQ,gBAAgB,CACzC,CACJ,EAEMO,GAAN,KAA6B,CAEzB,YAAY,CAAE,mBAAAC,CAAmB,EAAE,CADnCC,EAAA,4BAIAA,EAAA,0BAAqB,MAAO,CAAE,QAAAnB,EAAS,OAAAoB,CAAO,IAAI,CAC9C,IAAML,GAAWK,GAAA,YAAAA,EAAQ,WAAY,KAAK,oBAAoB,qBAAqBpB,EAAQ,GAAG,EAC9F,OAAOe,EAAW,IAAI,QAAQA,EAAU,CACpC,QAASf,EAAQ,OACrB,CAAC,EAAIA,CACT,GAPI,KAAK,oBAAsBkB,CAC/B,CAOJ,EAEMG,GAAuB,CAACX,EAASY,EAAkB,CAAC,IAAI,CAC1D,GAAM,CAAE,UAAWC,EAAmB,QAASC,EAAkB,CAAC,EAAG,aAAcC,EAAsB,aAAcC,EAAsB,kBAAmBC,EAA2B,eAAgBC,EAAwB,4BAA6BC,EAAoB,UAAWC,EAAmB,gBAAiBC,EAAyB,sBAAAC,EAAuB,YAAAC,EAAc,GAAI,iBAAAC,EAAkB,0BAAAC,GAA2B,yBAAAC,CAAyB,EAAId,GAAA,KAAAA,EAAmB,CAAC,EACne,MAAO,CACH,wBAAyB,CACrB,UAAWe,EAAa,gBAAgBd,CAAiB,EACzD,QAAS,CACL,GAAGC,EACH,IAAIP,GAAuB,CACvB,mBAAoBP,CACxB,CAAC,CACL,EACA,aAAce,EACd,aAAcC,EACd,kBAAmBC,CACvB,EACA,qBAAsB,CAClB,eAAgBC,EAChB,4BAA6BC,EAC7B,UAAWC,EACX,gBAAiBC,CACrB,EACA,oBAAqB,CACjB,sBAAAC,EACA,YAAAC,EACA,iBAAAC,EACA,0BAAAC,GACA,yBAAAC,CACJ,CACJ,CACJ,EAEME,GAAN,KAAc,CAUV,YAAY,CAAE,gBAAAC,EAAiB,gBAAAjB,EAAiB,YAAAkB,EAAc,GAAO,cAAAC,EAAe,kBAAAC,EAAoB,GAAO,QAAAC,EAAS,aAAcC,EAAiB,GAAO,eAAAC,EAAgB,uBAAAC,EAAwB,eAAgBC,EAAmB,GAAO,UAAAC,EAAW,aAAAC,CAAa,EAAI,CAAC,EAAE,CAT/Q9B,EAAA,wBAAmB,IAAI,KACvBA,EAAA,yBAAoB,IAAI,KACxBA,EAAA,+BAA0B,IAAI,KAC9BA,EAAA,8BACAA,EAAA,0BACAA,EAAA,gBACAA,EAAA,2BACAA,EAAA,sBACAA,EAAA,sBAEI,GAAM,CAAE,wBAAA+B,EAAyB,qBAAAC,GAAsB,oBAAAC,CAAoB,EAAI/B,GAAqB,KAAMC,CAAe,EAoDzH,GAnDA,KAAK,sBAAwB8B,EAAoB,YACjD,KAAK,kBAAoB,IAAIC,EAAiBH,CAAuB,EACrE,KAAK,QAAU,IAAI,IACnB,KAAK,mBAAqB,IAAI,IAC9B,KAAK,cAAgBD,EACrB,KAAK,cAAgB,KAAK,cAAc,KAAK,IAAI,EACjD,KAAK,eAAiB,KAAK,eAAe,KAAK,IAAI,EACnD,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EACvCR,GAAiBA,EAAc,OAAS,GAAG,KAAK,cAAc,GAAGA,CAAa,EAChFC,GAAmBY,GAAwB,EAC3CX,IAAY,QACZY,GAAoB,CAChB,OAAQZ,CACZ,CAAC,EAEDH,EACA,KAAK,YAAY,EAEjB,KAAK,iBAAiB,UAAYgB,GAAQ,CAClCA,EAAM,MAAQA,EAAM,KAAK,OAAS,gBAClC,KAAK,YAAY,CAEzB,CAAC,EAEDZ,GAAgBa,GAAa,EAC3BlB,GAAmBA,EAAgB,OAAS,GAC9C,KAAK,kBAAkBA,CAAe,EAEtCa,EAAoB,uBACpBpB,GAAsBkB,EAAwB,SAAS,EAE3D,KAAK,cAAc,IAAI1C,GAAc,KAAM2C,EAAoB,CAAC,EAC5DC,EAAoB,kBACpB,KAAK,cAAc,IAAIM,EAAgB,KAAK,wBAAwBN,EAAoB,gBAAgB,EAAG,CACvG,UAAWA,EAAoB,0BAC/B,SAAUA,EAAoB,wBAClC,CAAC,CAAC,EAEFN,IAA2B,SACvB,OAAOA,GAA2B,UAClCA,GAA0Ba,GAA0B,CAChD,QAAS,IACb,CAAC,EAEDA,GAA0BC,EAAAC,EAAA,GACnBf,GADmB,CAEtB,QAAS,IACb,EAAC,GAGLD,IAAmB,OAAW,CAC9B,GAAIG,IAAc,OAAW,CACzB,IAAMc,EAAiB,IAAIC,GAAuB,CAC9C,aAAcf,EAAU,QACxB,QAAS,IACb,CAAC,EACDH,EAAe,QAASmB,IAAa,CAC7BA,GAAW,mBAAmBpE,GAAY,CAACoE,GAAW,QAAQ,QAAQ,KAAMC,IAAS,oBAAqBA,EAAM,GAChHD,GAAW,QAAQ,QAAQ,KAAKF,CAAc,CAEtD,CAAC,CACL,CACA,QAAWI,KAASrB,EAChB,KAAK,gBAAgBqB,EAAM,QAASA,EAAM,QAASA,EAAM,MAAM,CAEvE,CACInB,GAAkBoB,GAAe,CACzC,CACA,IAAI,kBAAmB,CACnB,OAAO,KAAK,iBAChB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,OAChB,CACA,mBAAoB,CAChB,KAAK,iBAAiB,UAAW,KAAK,aAAa,EACnD,KAAK,iBAAiB,WAAY,KAAK,cAAc,EACrD,KAAK,iBAAiB,QAAS,KAAK,WAAW,EAC/C,KAAK,iBAAiB,UAAW,KAAK,WAAW,CACrD,CACA,kBAAkBC,EAAS,CASvB,IAAMC,EAAkB,CAAC,EACzB,QAAWH,KAASE,EAAQ,CACpB,OAAOF,GAAU,SACjBG,EAAgB,KAAKH,CAAK,EACnBA,GAAS,CAACA,EAAM,WAAaA,EAAM,WAAa,QACvDG,EAAgB,KAAKH,EAAM,GAAG,EAElC,GAAM,CAAE,SAAAnD,EAAU,IAAAuD,CAAI,EAAIC,GAAeL,CAAK,EACxCM,EAAY,OAAON,GAAU,UAAYA,EAAM,SAAW,SAAW,UAC3E,GAAI,KAAK,iBAAiB,IAAII,CAAG,GAAK,KAAK,iBAAiB,IAAIA,CAAG,IAAMvD,EACrE,MAAM,IAAIR,EAAa,wCAAyC,CAC5D,WAAY,KAAK,iBAAiB,IAAI+D,CAAG,EACzC,YAAavD,CACjB,CAAC,EAEL,GAAI,OAAOmD,GAAU,UAAYA,EAAM,UAAW,CAC9C,GAAI,KAAK,wBAAwB,IAAInD,CAAQ,GAAK,KAAK,wBAAwB,IAAIA,CAAQ,IAAMmD,EAAM,UACnG,MAAM,IAAI3D,EAAa,4CAA6C,CAChE,IAAA+D,CACJ,CAAC,EAEL,KAAK,wBAAwB,IAAIvD,EAAUmD,EAAM,SAAS,CAC9D,CACA,KAAK,iBAAiB,IAAII,EAAKvD,CAAQ,EACvC,KAAK,kBAAkB,IAAIuD,EAAKE,CAAS,CAC7C,CACA,GAAIH,EAAgB,OAAS,EAAG,CAC5B,IAAMI,EAAiB,qDAAqD,OAAAJ,EAAgB,KAAK,IAAI,EAAC,0EAElG,QAAQ,KAAKI,CAAc,CAInC,CACJ,CACA,cAAcjB,EAAO,CACjB,OAAK,KAAK,qBAAqBA,CAAK,EAC7BkB,GAAUlB,EAAO,SAAU,CAC9B,IAAMmB,EAAsB,IAAIC,EAChC,KAAK,iBAAiB,QAAQ,KAAKD,CAAmB,EACtD,MAAME,GAAS,KAAK,sBAAuB,MAAM,KAAK,KAAK,iBAAiB,QAAQ,CAAC,EAAG,MAAO,CAACP,EAAKvD,CAAQ,IAAI,CAC7G,IAAMC,EAAY,KAAK,wBAAwB,IAAID,CAAQ,EACrDyD,EAAY,KAAK,kBAAkB,IAAIF,CAAG,EAC1CtE,EAAU,IAAI,QAAQsE,EAAK,CAC7B,UAAAtD,EACA,MAAOwD,EACP,YAAa,aACjB,CAAC,EACD,MAAM,QAAQ,IAAI,KAAK,iBAAiB,UAAU,CAC9C,MAAAhB,EACA,QAAAxD,EACA,IAAK,IAAI,IAAIA,EAAQ,GAAG,EACxB,OAAQ,CACJ,SAAAe,CACJ,CACJ,CAAC,CAAC,CACN,CAAC,EACD,GAAM,CAAE,YAAA+D,EAAa,eAAAC,CAAe,EAAIJ,EAIxC,MAAO,CACH,YAAAG,EACA,eAAAC,CACJ,CACJ,CAAC,CACL,CACA,MAAM,qBAAqBvB,EAAO,CAC9B,GAAK,KAAK,eAGLA,GAAA,MAAAA,EAAO,UAMZ,GAAI,CAIA,MAAMA,EAAM,UAAU,KAAK,aAAa,EACxC,KAAK,cAAgB,MACzB,OAASnD,EAAO,CAIZ,MAAMA,CACV,CACJ,CACA,eAAemD,EAAO,CAClB,OAAOkB,GAAUlB,EAAO,SAAU,CAC9B,IAAMwB,EAAQ,MAAM,KAAK,OAAO,KAAK,KAAK,iBAAiB,SAAS,EAC9DC,EAA0B,MAAMD,EAAM,KAAK,EAC3CE,EAAoB,IAAI,IAAI,KAAK,iBAAiB,OAAO,CAAC,EAC1DC,EAAuB,CAAC,EAC9B,QAAWnF,KAAWiF,EACbC,EAAkB,IAAIlF,EAAQ,GAAG,IAClC,MAAMgF,EAAM,OAAOhF,CAAO,EAC1BmF,EAAqB,KAAKnF,EAAQ,GAAG,GAM7C,MAAO,CACH,qBAAAmF,CACJ,CACJ,CAAC,CACL,CACA,YAAY3B,EAAO,CACf,GAAM,CAAE,QAAAxD,CAAQ,EAAIwD,EACd4B,EAAkB,KAAK,cAAc,CACvC,QAAApF,EACA,MAAAwD,CACJ,CAAC,EACG4B,GACA5B,EAAM,YAAY4B,CAAe,CAEzC,CACA,YAAY5B,EAAO,CAzuCvB,IAAA6B,EA0uCQ,GAAI7B,EAAM,MAAQA,EAAM,KAAK,OAAS,aAAc,CAChD,GAAM,CAAE,QAAA8B,CAAQ,EAAI9B,EAAM,KAIpB+B,EAAkB,QAAQ,IAAID,EAAQ,YAAY,IAAKpB,GAAQ,CACjE,IAAIlE,EACJ,OAAI,OAAOkE,GAAU,SACjBlE,EAAU,IAAI,QAAQkE,CAAK,EAE3BlE,EAAU,IAAI,QAAQ,GAAGkE,CAAK,EAE3B,KAAK,cAAc,CACtB,QAAAlE,EACA,MAAAwD,CACJ,CAAC,CACL,CAAC,CAAC,EACFA,EAAM,UAAU+B,CAAe,GAC3BF,EAAA7B,EAAM,QAAN,MAAA6B,EAAc,IACTE,EAAgB,KAAK,IAAI/B,EAAM,MAAM,CAAC,EAAE,YAAY,EAAI,CAAC,CAEtE,CACJ,CACA,kBAAkBvD,EAASuF,EAASC,GAAe,CAC/C,KAAK,mBAAmB,IAAID,EAAQE,EAAiBzF,CAAO,CAAC,CACjE,CACA,gBAAgBA,EAAS,CACrB,KAAK,cAAgByF,EAAiBzF,CAAO,CACjD,CACA,gBAAgB0F,EAAS1F,EAASuF,EAAQ,CACtC,IAAMI,EAAQC,GAAWF,EAAS1F,EAASuF,CAAM,EACjD,YAAK,cAAcI,CAAK,EACjBA,CACX,CACA,cAAcA,EAAO,CAiCZ,KAAK,QAAQ,IAAIA,EAAM,MAAM,GAC9B,KAAK,QAAQ,IAAIA,EAAM,OAAQ,CAAC,CAAC,EAErC,KAAK,QAAQ,IAAIA,EAAM,MAAM,EAAE,KAAKA,CAAK,CAC7C,CACA,gBAAgBA,EAAO,CACnB,GAAI,CAAC,KAAK,QAAQ,IAAIA,EAAM,MAAM,EAC9B,MAAM,IAAIrF,EAAa,6CAA8C,CACjE,OAAQqF,EAAM,MAClB,CAAC,EAEL,IAAME,EAAa,KAAK,QAAQ,IAAIF,EAAM,MAAM,EAAE,QAAQA,CAAK,EAC/D,GAAIE,EAAa,GACb,KAAK,QAAQ,IAAIF,EAAM,MAAM,EAAE,OAAOE,EAAY,CAAC,MAEnD,OAAM,IAAIvF,EAAa,uCAAuC,CAEtE,CACA,uBAAwB,CACpB,OAAO,KAAK,gBAChB,CACA,kBAAmB,CACf,MAAO,CACH,GAAG,KAAK,iBAAiB,KAAK,CAClC,CACJ,CACA,qBAAqB+D,EAAK,CACtB,IAAMyB,EAAY,IAAI,IAAIzB,EAAK,SAAS,IAAI,EAC5C,OAAO,KAAK,iBAAiB,IAAIyB,EAAU,IAAI,CACnD,CACA,2BAA2BhF,EAAU,CACjC,OAAO,KAAK,wBAAwB,IAAIA,CAAQ,CACpD,CACA,MAAM,cAAcf,EAAS,CACzB,IAAMsE,EAAMtE,aAAmB,QAAUA,EAAQ,IAAMA,EACjDe,EAAW,KAAK,qBAAqBuD,CAAG,EAC9C,GAAIvD,EAEA,OADc,MAAM,KAAK,OAAO,KAAK,KAAK,iBAAiB,SAAS,GACvD,MAAMA,CAAQ,CAGnC,CACA,wBAAwBuD,EAAK,CACzB,IAAMvD,EAAW,KAAK,qBAAqBuD,CAAG,EAC9C,GAAI,CAACvD,EACD,MAAM,IAAIR,EAAa,oBAAqB,CACxC,IAAA+D,CACJ,CAAC,EAEL,OAAQzE,IACJA,EAAQ,QAAU,IAAI,QAAQyE,CAAG,EACjCzE,EAAQ,OAASgE,EAAA,CACb,SAAA9C,GACGlB,EAAQ,QAER,KAAK,iBAAiB,OAAOA,CAAO,EAEnD,CACA,cAAc,CAAE,QAAAG,EAAS,MAAAwD,CAAM,EAAG,CAS9B,IAAMc,EAAM,IAAI,IAAItE,EAAQ,IAAK,SAAS,IAAI,EAC9C,GAAI,CAACsE,EAAI,SAAS,WAAW,MAAM,EAI/B,OAEJ,IAAM0B,EAAa1B,EAAI,SAAW,SAAS,OACrC,CAAE,OAAAlD,EAAQ,MAAAwE,CAAM,EAAI,KAAK,kBAAkB,CAC7C,MAAApC,EACA,QAAAxD,EACA,WAAAgG,EACA,IAAA1B,CACJ,CAAC,EACGrE,EAAU2F,GAAA,YAAAA,EAAO,QACfK,EAAgB,CAAC,EAejBT,EAASxF,EAAQ,OAOvB,GANI,CAACC,GAAW,KAAK,mBAAmB,IAAIuF,CAAM,IAI9CvF,EAAU,KAAK,mBAAmB,IAAIuF,CAAM,GAE5C,CAACvF,EAID,OAaJ,IAAImF,EACJ,GAAI,CACAA,EAAkBnF,EAAQ,OAAO,CAC7B,IAAAqE,EACA,QAAAtE,EACA,MAAAwD,EACA,OAAApC,CACJ,CAAC,CACL,OAASd,EAAK,CACV8E,EAAkB,QAAQ,OAAO9E,CAAG,CACxC,CACA,IAAM4F,EAAeN,GAAA,YAAAA,EAAO,aAC5B,OAAIR,aAA2B,UAAY,KAAK,eAAiBc,KAC7Dd,EAAkBA,EAAgB,MAAM,MAAO9E,GAAM,CACjD,GAAI4F,EAOA,GAAI,CACA,OAAO,MAAMA,EAAa,OAAO,CAC7B,IAAA5B,EACA,QAAAtE,EACA,MAAAwD,EACA,OAAApC,CACJ,CAAC,CACL,OAAS+E,EAAU,CACXA,aAAoB,QACpB7F,EAAM6F,EAEd,CAEJ,GAAI,KAAK,cAOL,OAAO,KAAK,cAAc,OAAO,CAC7B,IAAA7B,EACA,QAAAtE,EACA,MAAAwD,CACJ,CAAC,EAEL,MAAMlD,CACV,CAAC,GAEE8E,CACX,CACA,kBAAkB,CAAE,IAAAd,EAAK,WAAA0B,EAAY,QAAAhG,EAAS,MAAAwD,CAAM,EAAG,CACnD,IAAM4C,EAAS,KAAK,QAAQ,IAAIpG,EAAQ,MAAM,GAAK,CAAC,EACpD,QAAW4F,KAASQ,EAAO,CACvB,IAAIhF,EACEiF,EAAcT,EAAM,MAAM,CAC5B,IAAAtB,EACA,WAAA0B,EACA,QAAAhG,EACA,MAAAwD,CACJ,CAAC,EACD,GAAI6C,EAMA,OAAAjF,EAASiF,GACL,MAAM,QAAQjF,CAAM,GAAKA,EAAO,SAAW,GAEpCiF,EAAY,cAAgB,QAAU,OAAO,KAAKA,CAAW,EAAE,SAAW,GAE1E,OAAOA,GAAgB,aAC9BjF,EAAS,QAEN,CACH,MAAAwE,EACA,OAAAxE,CACJ,CAER,CACA,MAAO,CAAC,CACZ,CACJ,ECx/CA,IAAMkF,GAAmB,CACrB,YAAa,qBACb,IAAK,YACL,KAAM,OACV,EACMC,GAKF,CACA,CACI,QAAS,0CACT,QAAS,IAAIC,EAAW,CACpB,UAAW,wBACX,QAAS,CACL,IAAIC,EAAiB,CACjB,WAAY,EACZ,cAAe,IAAM,GAAK,GAAK,GAC/B,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,6CACT,QAAS,IAAIC,EAAqB,CAC9B,UAAW,2BACX,QAAS,CACL,IAAID,EAAiB,CACjB,WAAY,EACZ,cAAe,MAAc,GAC7B,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,8CACT,QAAS,IAAIC,EAAqB,CAC9B,UAAW,qBACX,QAAS,CACL,IAAID,EAAiB,CACjB,WAAY,EACZ,cAAe,MAAc,GAC7B,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,wCACT,QAAS,IAAIC,EAAqB,CAC9B,UAAW,sBACX,QAAS,CACL,IAAID,EAAiB,CACjB,WAAY,GACZ,cAAe,IAAU,GAAK,GAC9B,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,0BACT,QAAS,IAAID,EAAW,CACpB,UAAW,wBACX,QAAS,CACL,IAAIC,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,GACzB,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,2BACT,QAAS,IAAIC,EAAqB,CAC9B,UAAW,aACX,QAAS,CACL,IAAID,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,GACzB,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,sBACT,QAAS,IAAID,EAAW,CACpB,UAAW,sBACX,QAAS,CACL,IAAIC,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,GACzB,WAAY,WAChB,CAAC,EACD,IAAIE,CACR,CACJ,CAAC,CACL,EACA,CACI,QAAS,mBACT,QAAS,IAAIH,EAAW,CACpB,UAAW,sBACX,QAAS,CACL,IAAIC,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,GACzB,WAAY,WAChB,CAAC,EACD,IAAIE,CACR,CACJ,CAAC,CACL,EACA,CACI,QAAS,aACT,QAAS,IAAID,EAAqB,CAC9B,UAAW,mBACX,QAAS,CACL,IAAID,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,GACzB,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,mBACT,QAAS,IAAIC,EAAqB,CAC9B,UAAW,sBACX,QAAS,CACL,IAAID,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,GACzB,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,gCACT,QAAS,IAAIG,EAAa,CACtB,UAAW,YACX,QAAS,CACL,IAAIH,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,GACzB,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,uBACT,QAAS,IAAIG,EAAa,CACtB,UAAW,qBACX,QAAS,CACL,IAAIH,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,GACzB,WAAY,WAChB,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,kBACT,QAAS,IAAII,EAAY,CACrB,sBAAuB,EAC3B,CAAC,CACL,EACA,CACI,QAAS,CAAC,CAAE,WAAAC,EAAY,IAAK,CAAE,SAAAC,CAAS,CAAE,IAAID,GAAcC,EAAS,WAAW,OAAO,EACvF,OAAQ,MACR,QAAS,IAAIH,EAAa,CACtB,UAAW,OACX,QAAS,CACL,IAAIH,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,GACzB,WAAY,WAChB,CAAC,CACL,EACA,sBAAuB,EAC3B,CAAC,CACL,EACA,CACI,QAAS,CAAC,CAAE,QAAAO,EAAS,IAAK,CAAE,SAAAD,CAAS,EAAG,WAAAD,CAAW,IAAIE,EAAQ,QAAQ,IAAI,KAAK,IAAM,KAAOA,EAAQ,QAAQ,IAAI,sBAAsB,IAAM,KAAOF,GAAc,CAACC,EAAS,WAAW,OAAO,EAC9L,QAAS,IAAIH,EAAa,CACtB,UAAWN,GAAiB,YAC5B,QAAS,CACL,IAAIG,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,EAC7B,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,CAAC,CAAE,QAAAO,EAAS,IAAK,CAAE,SAAAD,CAAS,EAAG,WAAAD,CAAW,IAAIE,EAAQ,QAAQ,IAAI,KAAK,IAAM,KAAOF,GAAc,CAACC,EAAS,WAAW,OAAO,EACvI,QAAS,IAAIH,EAAa,CACtB,UAAWN,GAAiB,IAC5B,QAAS,CACL,IAAIG,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,EAC7B,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,CAAC,CAAE,QAAAO,EAAS,IAAK,CAAE,SAAAD,CAAS,EAAG,WAAAD,CAAW,IAAE,CAzN7D,IAAAG,EAyN+D,QAAAA,EAAAD,EAAQ,QAAQ,IAAI,cAAc,IAAlC,YAAAC,EAAqC,SAAS,eAAgBH,GAAc,CAACC,EAAS,WAAW,OAAO,GAC/J,QAAS,IAAIH,EAAa,CACtB,UAAWN,GAAiB,KAC5B,QAAS,CACL,IAAIG,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,EAC7B,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,CAAC,CAAE,IAAK,CAAE,SAAAM,CAAS,EAAG,WAAAD,CAAW,IAAIA,GAAc,CAACC,EAAS,WAAW,OAAO,EACxF,QAAS,IAAIH,EAAa,CACtB,UAAW,SACX,QAAS,CACL,IAAIH,EAAiB,CACjB,WAAY,GACZ,cAAe,KAAU,EAC7B,CAAC,CACL,CACJ,CAAC,CACL,EACA,CACI,QAAS,CAAC,CAAE,WAAAK,CAAW,IAAI,CAACA,EAC5B,QAAS,IAAIF,EAAa,CACtB,UAAW,eACX,QAAS,CACL,IAAIH,EAAiB,CACjB,WAAY,GACZ,cAAe,IACnB,CAAC,CACL,EACA,sBAAuB,EAC3B,CAAC,CACL,EACA,CACI,QAAS,MACT,OAAQ,MACR,QAAS,IAAII,CACjB,CACJ,ECrPA,IAAMK,GAAU,IAAIC,GAAQ,CACxB,gBAAiBC,EACjB,YAAa,GACb,aAAc,GACd,kBAAmB,GACnB,eAAgBC,EACpB,CAAC,EAEDH,GAAQ,kBAAkB",
  "names": ["define_self_SW_MANIFEST_default", "_cacheNameDetails", "_createCacheName", "cacheName", "value", "eachCacheNameDetail", "fn", "key", "cacheNames", "details", "detail", "userCacheName", "supportStatus", "canConstructResponseFromBodyStream", "testResponse", "fallback", "code", "args", "msg", "messageGenerator", "fallback", "SerwistError", "errorCode", "details", "message", "__publicField", "getFriendlyURL", "url", "timeout", "ms", "resolve", "quotaErrorCallbacks", "stripParams", "fullURL", "ignoreParams", "strippedURL", "param", "cacheMatchIgnoreParams", "cache", "request", "matchOptions", "strippedRequestURL", "keysOptions", "__spreadProps", "__spreadValues", "cacheKeys", "cacheKey", "strippedCacheKeyURL", "Deferred", "__publicField", "reject", "executeQuotaErrorCallbacks", "callback", "SUBSTRING_TO_FIND", "deleteOutdatedCaches", "currentPrecacheName", "substringToFind", "cacheNamesToDelete", "cacheName", "cleanupOutdatedCaches", "event", "cacheNames", "cachesDeleted", "clientsClaim", "waitUntil", "asyncFn", "returnPromise", "instanceOfAny", "object", "constructors", "c", "idbProxyableTypes", "cursorAdvanceMethods", "getIdbProxyableTypes", "getCursorAdvanceMethods", "transactionDoneMap", "transformCache", "reverseTransformCache", "promisifyRequest", "request", "promise", "resolve", "reject", "unlisten", "success", "error", "wrap", "cacheDonePromiseForTransaction", "tx", "done", "complete", "idbProxyTraps", "target", "prop", "receiver", "value", "replaceTraps", "callback", "wrapFunction", "func", "args", "unwrap", "transformCachableValue", "newValue", "openDB", "name", "version", "blocked", "upgrade", "blocking", "terminated", "openPromise", "event", "db", "deleteDB", "readMethods", "writeMethods", "cachedMethods", "getMethod", "targetFuncName", "useIndex", "isWrite", "method", "storeName", "oldTraps", "__spreadProps", "__spreadValues", "advanceMethodProps", "methodMap", "advanceResults", "ittrProxiedCursorToOriginalProxy", "cursorIteratorTraps", "cachedFunc", "iterate", "__asyncGenerator", "cursor", "__await", "proxiedCursor", "isIteratorProp", "copyResponse", "response", "modifier", "origin", "SerwistError", "clonedResponse", "responseInit", "modifiedResponseInit", "body", "canConstructResponseFromBodyStream", "disableDevLogs", "BACKGROUND_SYNC_DB_VERSION", "BACKGROUND_SYNC_DB_NAME", "REQUEST_OBJECT_STORE_NAME", "QUEUE_NAME_INDEX", "BackgroundSyncQueueDb", "__publicField", "entry", "tx", "cursor", "queueName", "results", "id", "query", "direction", "openDB", "db", "oldVersion", "BackgroundSyncQueueStore", "firstId", "serializableProperties", "StorableRequest", "_StorableRequest", "requestData", "request", "value", "key", "prop", "TAG_PREFIX", "MAX_RETENTION_TIME", "queueNames", "convertEntry", "queueStoreEntry", "queueEntry", "BackgroundSyncQueue", "name", "forceSyncFallback", "onSync", "maxRetentionTime", "allEntries", "now", "unexpiredEntries", "maxRetentionTimeInMs", "metadata", "timestamp", "operation", "e", "err", "event", "syncComplete", "syncError", "error", "BackgroundSyncPlugin", "options", "cacheOkAndOpaquePlugin", "toRequest", "input", "StrategyHandler", "strategy", "Deferred", "plugin", "preloadResponse", "originalRequest", "cb", "pluginFilteredRequest", "fetchResponse", "callback", "responseClone", "cachedResponse", "cacheName", "matchOptions", "effectiveRequest", "multiMatchOptions", "__spreadProps", "__spreadValues", "timeout", "getFriendlyURL", "responseToCache", "cache", "hasCacheUpdateCallback", "oldResponse", "cacheMatchIgnoreParams", "executeQuotaErrorCallbacks", "mode", "param", "state", "statefulParam", "promise", "possiblePreloadResponse", "pluginsUsed", "Strategy", "cacheNames", "responseDone", "handler", "handlerDone", "waitUntilError", "NetworkFirst", "Strategy", "options", "__publicField", "p", "cacheOkAndOpaquePlugin", "request", "handler", "logs", "promises", "timeoutId", "id", "promise", "networkPromise", "response", "SerwistError", "resolve", "error", "fetchError", "NetworkOnly", "timeoutPromise", "timeout", "err", "defaultMethod", "normalizeHandler", "handler", "Route", "match", "method", "defaultMethod", "__publicField", "_PrecacheStrategy", "Strategy", "options", "cacheNames", "request", "preloadResponse", "response", "params", "integrityInManifest", "integrityInRequest", "noIntegrityConflict", "wasCached", "SerwistError", "defaultPluginIndex", "cacheWillUpdatePluginCount", "index", "plugin", "copyResponse", "PrecacheStrategy", "NavigationRoute", "allowlist", "denylist", "url", "pathnameAndSearch", "regExp", "isNavigationPreloadSupported", "_a", "enableNavigationPreload", "headerValue", "event", "removeIgnoredSearchParams", "urlObject", "ignoreURLParametersMatching", "paramName", "regExp", "generateURLVariations", "url", "directoryIndex", "cleanURLs", "urlManipulation", "urlWithoutIgnoredParams", "directoryURL", "cleanURL", "additionalURLs", "urlToAttempt", "RegExpRoute", "Route", "handler", "method", "match", "result", "setCacheNameDetails", "details", "cacheNames", "REVISION_SEARCH_PARAM", "createCacheKey", "entry", "SerwistError", "revision", "cacheKeyURL", "originalURL", "PrecacheInstallReportPlugin", "__publicField", "request", "state", "event", "cachedResponse", "parseRoute", "capture", "captureUrl", "matchCallback", "parallel", "limit", "array", "func", "work", "item", "index", "processor", "res", "results", "next", "result", "queues", "a", "b", "isSafari", "DB_NAME", "CACHE_OBJECT_STORE", "normalizeURL", "unNormalizedUrl", "url", "CacheTimestampsModel", "cacheName", "__publicField", "db", "objStore", "deleteDB", "timestamp", "entry", "tx", "minTimestamp", "maxCount", "cursor", "urlsDeleted", "entriesNotDeletedCount", "result", "openDB", "CacheExpiration", "config", "urlsExpired", "cache", "expireOlderThan", "registerQuotaErrorCallback", "callback", "quotaErrorCallbacks", "ExpirationPlugin", "cacheNames", "SerwistError", "cacheExpiration", "event", "request", "cachedResponse", "isFresh", "isMaxAgeFromLastUsed", "done", "e", "now", "dateHeaderTimestamp", "dateHeader", "headerTime", "QUEUE_NAME", "MAX_RETENTION_TIME", "GOOGLE_ANALYTICS_HOST", "GTM_HOST", "ANALYTICS_JS_PATH", "GTAG_JS_PATH", "GTM_JS_PATH", "COLLECT_PATHS_REGEX", "createOnSyncCallback", "queue", "params", "originalHitTime", "queueTime", "param", "value", "err", "createCollectRoutes", "bgSyncPlugin", "match", "handler", "NetworkOnly", "Route", "createAnalyticsJsRoute", "NetworkFirst", "createGtagJsRoute", "createGtmJsRoute", "initializeGoogleAnalytics", "_a", "_b", "serwist", "options", "__objRest", "resolvedCacheName", "BackgroundSyncPlugin", "routes", "route", "PrecacheFallbackPlugin", "fallbackUrls", "fallback", "fallbackResponse", "calculateEffectiveBoundaries", "blob", "start", "end", "blobSize", "effectiveStart", "effectiveEnd", "parseRangeHeader", "rangeHeader", "normalizedRangeHeader", "rangeParts", "createPartialResponse", "originalResponse", "boundaries", "originalBlob", "effectiveBoundaries", "slicedBlob", "slicedBlobSize", "slicedResponse", "error", "RangeRequestsPlugin", "CacheFirst", "Strategy", "logs", "response", "StaleWhileRevalidate", "Strategy", "options", "p", "cacheOkAndOpaquePlugin", "request", "handler", "logs", "fetchAndCachePromise", "response", "error", "err", "SerwistError", "PrecacheRoute", "Route", "serwist", "match", "urlsToCacheKeys", "possibleURL", "generateURLVariations", "cacheKey", "integrity", "PrecacheCacheKeyPlugin", "precacheController", "__publicField", "params", "parsePrecacheOptions", "precacheOptions", "precacheCacheName", "precachePlugins", "precacheFetchOptions", "precacheMatchOptions", "precacheFallbackToNetwork", "precacheDirectoryIndex", "precacheIgnoreUrls", "precacheCleanUrls", "precacheUrlManipulation", "cleanupOutdatedCaches", "concurrency", "navigateFallback", "navigateFallbackAllowlist", "navigateFallbackDenylist", "cacheNames", "Serwist", "precacheEntries", "skipWaiting", "importScripts", "navigationPreload", "cacheId", "clientsClaim$1", "runtimeCaching", "offlineAnalyticsConfig", "disableDevLogs$1", "fallbacks", "requestRules", "precacheStrategyOptions", "precacheRouteOptions", "precacheMiscOptions", "PrecacheStrategy", "enableNavigationPreload", "setCacheNameDetails", "event", "clientsClaim", "NavigationRoute", "initializeGoogleAnalytics", "__spreadProps", "__spreadValues", "fallbackPlugin", "PrecacheFallbackPlugin", "cacheEntry", "plugin", "entry", "disableDevLogs", "entries", "urlsToWarnAbout", "url", "createCacheKey", "cacheMode", "warningMessage", "waitUntil", "installReportPlugin", "PrecacheInstallReportPlugin", "parallel", "updatedURLs", "notUpdatedURLs", "cache", "currentlyCachedRequests", "expectedCacheKeys", "deletedCacheRequests", "responsePromise", "_a", "payload", "requestPromises", "method", "defaultMethod", "normalizeHandler", "capture", "route", "parseRoute", "routeIndex", "urlObject", "sameOrigin", "debugMessages", "catchHandler", "catchErr", "routes", "matchResult", "PAGES_CACHE_NAME", "defaultCache", "CacheFirst", "ExpirationPlugin", "StaleWhileRevalidate", "RangeRequestsPlugin", "NetworkFirst", "NetworkOnly", "sameOrigin", "pathname", "request", "_a", "serwist", "Serwist", "define_self_SW_MANIFEST_default", "defaultCache"]
}
